Author: mturk Date: Thu Mar 15 07:37:07 2007 New Revision: 518641 URL: http://svn.apache.org/viewvc?view=rev&rev=518641 Log: Add getpid() to the JkShmFile so it's always unique. Thanks to Rainer for an idea.
Modified: tomcat/connectors/trunk/jk/native/common/jk_shm.c Modified: tomcat/connectors/trunk/jk/native/common/jk_shm.c URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_shm.c?view=diff&rev=518641&r1=518640&r2=518641 ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_shm.c (original) +++ tomcat/connectors/trunk/jk/native/common/jk_shm.c Thu Mar 15 07:37:07 2007 @@ -58,7 +58,7 @@ struct jk_shm { size_t size; - const char *filename; + char *filename; char *lockname; int fd; int fd_lock; @@ -131,7 +131,12 @@ JK_TRACE_EXIT(l); return -1; } - jk_shmem.filename = "memory"; + if (!jk_shmem.filename) { + if (fname) + jk_shmem.filename = strdup(fname); + else + jk_shmem.filename = strdup("memory"); + } jk_shmem.fd = 0; jk_shmem.attached = attached; if (!attached) { @@ -209,6 +214,10 @@ JK_DELETE_CS(&(jk_shmem.cs), rc); } jk_shmem.hdr = NULL; + if (jk_shmem.filename) { + free(jk_shmem.filename); + jk_shmem.filename = NULL; + } } #else @@ -328,12 +337,12 @@ JK_TRACE_EXIT(l); return 0; } - jk_shmem.filename = fname; jk_shmem.size = JK_SHM_ALIGN(sizeof(jk_shm_header_t) + sz); - /* Use plain memory in case there is no file name */ if (!fname) { - jk_shmem.filename = "memory"; + /* Use plain memory in case there is no file name */ + if (!jk_shmem.filename) + jk_shmem.filename = strdup("memory"); if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, "Using process memory as shared memory"); @@ -341,10 +350,14 @@ return 0; } + if (!jk_shmem.filename) { + jk_shmem.filename = (char *)malloc(strlen(fname) + 32); + sprintf(jk_shmem.filename, "%s.%d", fname, (int)getpid()); + } if (!attached) { size_t size; jk_shmem.attached = 0; - fd = open(fname, O_RDWR|O_CREAT|O_TRUNC, 0666); + fd = open(jk_shmem.filename, O_RDWR|O_CREAT|O_TRUNC, 0666); if (fd == -1) { jk_shmem.size = 0; JK_TRACE_EXIT(l); @@ -423,7 +436,7 @@ jk_shmem.hdr->h.data.workers = 0; } JK_INIT_CS(&(jk_shmem.cs), rc); - if ((rc = do_shm_open_lock(fname, attached, l))) { + if ((rc = do_shm_open_lock(jk_shmem.filename, attached, l))) { if (!attached) { munmap((void *)jk_shmem.hdr, jk_shmem.size); close(jk_shmem.fd); @@ -482,6 +495,11 @@ if (jk_shmem.lockname) { unlink(jk_shmem.lockname); free(jk_shmem.lockname); + jk_shmem.lockname = NULL; + } + if (jk_shmem.filename) { + free(jk_shmem.filename); + jk_shmem.filename = NULL; } } jk_shmem.size = 0; --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]