You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by mt...@apache.org on 2011/11/08 13:31:51 UTC
svn commit: r1199217 - /tomcat/jk/trunk/native/common/jk_shm.c
Author: mturk
Date: Tue Nov 8 12:31:50 2011
New Revision: 1199217
URL: http://svn.apache.org/viewvc?rev=1199217&view=rev
Log:
Preserve shared memory thread lock for the process life time.
Modified:
tomcat/jk/trunk/native/common/jk_shm.c
Modified: tomcat/jk/trunk/native/common/jk_shm.c
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_shm.c?rev=1199217&r1=1199216&r2=1199217&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_shm.c (original)
+++ tomcat/jk/trunk/native/common/jk_shm.c Tue Nov 8 12:31:50 2011
@@ -155,16 +155,18 @@ int jk_shm_open(const char *fname, size_
char lkname[MAX_PATH];
JK_TRACE_ENTER(l);
+ if (!jk_shm_inited_cs) {
+ jk_shm_inited_cs = 1;
+ JK_INIT_CS(&jk_shmem.cs, rc);
+ }
+ JK_ENTER_CS(&jk_shmem.cs, rc);
if (jk_shmem.hdr) {
if (JK_IS_DEBUG_LEVEL(l))
jk_log(l, JK_LOG_DEBUG, "Shared memory is already opened");
JK_TRACE_EXIT(l);
+ JK_LEAVE_CS(&jk_shmem.cs, rc);
return 0;
}
- if (!jk_shm_inited_cs) {
- jk_shm_inited_cs = 1;
- JK_INIT_CS(&jk_shmem.cs, rc);
- }
#if defined (WIN32)
if (fname) {
sprintf(lkname, "Global\\%s_MUTEX", fname);
@@ -176,6 +178,7 @@ int jk_shm_open(const char *fname, size_
}
}
if (jk_shm_hlock == NULL) {
+ JK_LEAVE_CS(&jk_shmem.cs, rc);
JK_TRACE_EXIT(l);
return -1;
}
@@ -184,6 +187,7 @@ int jk_shm_open(const char *fname, size_
if (ws == WAIT_FAILED) {
CloseHandle(jk_shm_hlock);
jk_shm_hlock = NULL;
+ JK_LEAVE_CS(&jk_shmem.cs, rc);
JK_TRACE_EXIT(l);
return -1;
}
@@ -198,10 +202,11 @@ int jk_shm_open(const char *fname, size_
fname);
}
if (jk_shm_map == NULL || jk_shm_map == INVALID_HANDLE_VALUE) {
- JK_TRACE_EXIT(l);
CloseHandle(jk_shm_hlock);
jk_shm_hlock = NULL;
jk_shm_map = NULL;
+ JK_LEAVE_CS(&jk_shmem.cs, rc);
+ JK_TRACE_EXIT(l);
return -1;
}
jk_shmem.hdr = (jk_shm_header_t *)MapViewOfFile(jk_shm_map,
@@ -224,6 +229,7 @@ int jk_shm_open(const char *fname, size_
jk_shm_hlock = NULL;
}
#endif
+ JK_LEAVE_CS(&jk_shmem.cs, rc);
JK_TRACE_EXIT(l);
return -1;
}
@@ -264,6 +270,7 @@ int jk_shm_open(const char *fname, size_
/* Unlock shared memory */
ReleaseMutex(jk_shm_hlock);
}
+ JK_LEAVE_CS(&jk_shmem.cs, rc);
if (JK_IS_DEBUG_LEVEL(l))
jk_log(l, JK_LOG_DEBUG,
"%s shared memory %s size=%u free=%u addr=%#lx",
@@ -300,8 +307,11 @@ int jk_shm_attach(const char *fname, siz
void jk_shm_close()
{
- if (jk_shmem.hdr) {
+ if (jk_shm_inited_cs) {
int rc;
+ JK_ENTER_CS(&jk_shmem.cs, rc);
+ }
+ if (jk_shmem.hdr) {
#if defined (WIN32)
if (jk_shm_hlock) {
CloseHandle(jk_shm_hlock);
@@ -316,14 +326,16 @@ void jk_shm_close()
else
#endif
free(jk_shmem.hdr);
- JK_DELETE_CS(&(jk_shmem.cs), rc);
- jk_shm_inited_cs = 0;
}
jk_shmem.hdr = NULL;
if (jk_shmem.filename) {
free(jk_shmem.filename);
jk_shmem.filename = NULL;
}
+ if (jk_shm_inited_cs) {
+ int rc;
+ JK_LEAVE_CS(&jk_shmem.cs, rc);
+ }
}
#else
@@ -441,6 +453,10 @@ static int do_shm_open(const char *fname
#endif
JK_TRACE_ENTER(l);
+ if (!jk_shm_inited_cs) {
+ jk_shm_inited_cs = 1;
+ JK_INIT_CS(&jk_shmem.cs, rc);
+ }
if (jk_shmem.hdr) {
/* Probably a call from vhost */
if (!attached)
@@ -584,7 +600,6 @@ static int do_shm_open(const char *fname
jk_shmem.hdr->h.data.pos = 0;
jk_shmem.hdr->h.data.workers = 0;
}
- JK_INIT_CS(&(jk_shmem.cs), rc);
if ((rc = do_shm_open_lock(jk_shmem.filename, attached, l))) {
if (!attached) {
munmap((void *)jk_shmem.hdr, jk_shmem.size);
@@ -633,7 +648,6 @@ void jk_shm_close()
jk_shmem.fd_lock = -1;
}
#endif
- JK_DELETE_CS(&(jk_shmem.cs), rc);
if (jk_shmem.attached) {
int p = (int)getpid();
if (p == jk_shmem.attached) {
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org