mturk 2005/02/12 09:01:00
Modified: jk/native/common jk_shm.c jk_shm.h
Log:
Add modification time and lock api interface.
Revision Changes Path
1.9 +50 -6 jakarta-tomcat-connectors/jk/native/common/jk_shm.c
Index: jk_shm.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_shm.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- jk_shm.c 12 Feb 2005 11:32:12 -0000 1.8
+++ jk_shm.c 12 Feb 2005 17:01:00 -0000 1.9
@@ -21,6 +21,7 @@
***************************************************************************/
#include "jk_pool.h"
+#include "jk_mt.h"
#include "jk_shm.h"
/** jk shm header record structure */
@@ -31,6 +32,7 @@
size_t size;
size_t pos;
int childs;
+ time_t modified;
char buf[1];
};
@@ -44,18 +46,21 @@
int fd;
int attached;
jk_shm_header_t *hdr;
+ CRITICAL_SECTION cs;
};
typedef struct jk_shm jk_shm_t;
static const char shm_signature[] = { JK_SHM_MAGIC };
static jk_shm_t jk_shmem = { 0, NULL, -1, 0, NULL};
+static time_t jk_workers_modified_time = 0;
#if defined (WIN32) || defined(NETWARE)
/* Use plain memory */
int jk_shm_open(const char *fname)
{
+ int rc;
if (jk_shmem.hdr) {
return 0;
}
@@ -70,6 +75,7 @@
jk_shmem.attached = 0;
memcpy(jk_shmem.hdr->magic, shm_signature, 8);
jk_shmem.hdr->size = JK_SHM_SIZE;
+ JK_INIT_CS(&(jk_shmem.cs), rc);
return 0;
}
@@ -87,7 +93,9 @@
void jk_shm_close()
{
if (jk_shmem.hdr) {
+ int rc;
free(jk_shmem.hdr);
+ JK_DELETE_CS(&(jk_shmem.cs), rc);
}
jk_shmem.hdr = NULL;
}
@@ -121,13 +129,13 @@
jk_shmem.filename = fname;
jk_shmem.attached = attached;
+ jk_shmem.size = JK_SHM_ALIGN(sizeof(jk_shm_header_t) + JK_SHM_SIZE);
+
/* Use plain memory in case there is no file name */
if (!fname) {
jk_shmem.filename = "memory";
return 0;
- }
-
- jk_shmem.size = JK_SHM_ALIGN(sizeof(jk_shm_header_t) + JK_SHM_SIZE);
+ }
if (!attached)
flags |= (O_CREAT|O_TRUNC);
@@ -179,6 +187,7 @@
jk_shmem.hdr->childs++;
/* TODO: check header magic */
}
+ JK_INIT_CS(&(jk_shmem.cs), rc);
return 0;
}
@@ -194,14 +203,18 @@
void jk_shm_close()
{
+ int rc;
if (jk_shmem.hdr) {
if (jk_shmem.fd >= 0) {
munmap((void *)jk_shmem.hdr, jk_shmem.size);
close(jk_shmem.fd);
}
}
- jk_shmem.hdr = NULL;
- jk_shmem.fd = -1;
+ if (jk_shmem.size)
+ JK_DELETE_CS(&(jk_shmem.cs), rc);
+ jk_shmem.size = 0;
+ jk_shmem.hdr = NULL;
+ jk_shmem.fd = -1;
}
@@ -228,3 +241,34 @@
{
return jk_shmem.filename;
}
+
+
+time_t jk_shm_get_workers_time()
+{
+ if (jk_shmem.hdr)
+ return jk_shmem.hdr->modified;
+ else
+ return jk_workers_modified_time;
+}
+
+void jk_shm_set_workers_time(time_t t)
+{
+ if (jk_shmem.hdr)
+ jk_shmem.hdr->modified = t;
+ else
+ jk_workers_modified_time = t;
+}
+
+int jk_shm_lock()
+{
+ int rc;
+ JK_ENTER_CS(&(jk_shmem.cs), rc);
+ return rc;
+}
+
+int jk_shm_unlock()
+{
+ int rc;
+ JK_LEAVE_CS(&(jk_shmem.cs), rc);
+ return rc;
+}
1.7 +15 -1 jakarta-tomcat-connectors/jk/native/common/jk_shm.h
Index: jk_shm.h
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_shm.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- jk_shm.h 12 Feb 2005 11:32:12 -0000 1.6
+++ jk_shm.h 12 Feb 2005 17:01:00 -0000 1.7
@@ -110,6 +110,20 @@
*/
void *jk_shm_alloc(jk_pool_t *p, size_t size);
+/* Return workers.properties last modified time
+ */
+time_t jk_shm_get_workers_time();
+
+/* Set workers.properties last modified time
+ */
+void jk_shm_set_workers_time(time_t t);
+
+/* Lock shared memory for thread safe access */
+int jk_shm_lock();
+
+/* Unlock shared memory for thread safe access */
+int jk_shm_unlock();
+
#ifdef __cplusplus
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]