https://svn.apache.org/viewvc?view=revision&revision=1561395 --- apr-1.4.8/shmem/unix/shm.c.r1561395 +++ apr-1.4.8/shmem/unix/shm.c @@ -20,6 +20,18 @@ #include "apr_errno.h" #include "apr_user.h" #include "apr_strings.h" +#include "apr_hash.h" + +#if APR_USE_SHMEM_SHMGET +static key_t our_ftok(const char *filename) +{ + /* to help avoid collisions while still using + * an easily recreated proj_id */ + apr_ssize_t slen = strlen(filename); + return ftok(filename, + (int)apr_hashfunc_default(filename, &slen)); +} +#endif static apr_status_t shm_cleanup_owner(void *m_) { @@ -312,7 +324,7 @@ /* ftok() (on solaris at least) requires that the file actually * exist before calling ftok(). */ - shmkey = ftok(filename, 1); + shmkey = our_ftok(filename); if (shmkey == (key_t)-1) { return errno; } @@ -386,7 +398,7 @@ /* ftok() (on solaris at least) requires that the file actually * exist before calling ftok(). */ - shmkey = ftok(filename, 1); + shmkey = our_ftok(filename); if (shmkey == (key_t)-1) { goto shm_remove_failed; } @@ -540,7 +552,7 @@ new_m->filename = apr_pstrdup(pool, filename); new_m->pool = pool; - shmkey = ftok(filename, 1); + shmkey = our_ftok(filename); if (shmkey == (key_t)-1) { return errno; }