mturk 2005/02/06 03:20:49
Modified: jk/native/common jk_shm.c
Log:
Use plain memory if shmem filename was not defined.
This enable transparent API, regardles of shm type and JkShmFile.
Revision Changes Path
1.4 +37 -15 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.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- jk_shm.c 6 Feb 2005 10:35:55 -0000 1.3
+++ jk_shm.c 6 Feb 2005 11:20:49 -0000 1.4
@@ -85,8 +85,6 @@
}
}
-
-
#else
#include <unistd.h>
@@ -110,48 +108,68 @@
int fd;
int flags = O_RDWR;
- if (!attached)
- flags |= (O_CREAT|O_TRUNC);
- fd = open(fname, flags, 0666);
- if (fd == -1)
- return -1;
+ shm->size = 0;
+ shm->base = NULL;
if (workers < 1 || workers > JK_SHM_MAX_WORKERS)
workers = JK_SHM_MAX_WORKERS;
if (dynamic < 1 || dynamic > JK_SHM_MAX_WORKERS)
dynamic = JK_SHM_MAX_WORKERS;
+ shm->filename = fname;
+ shm->attached = attached;
shm->size = sizeof(jk_shm_h_rec_t) + (workers + dynamic) *
sizeof(jk_shm_w_rec_t);
+ /* Use plain memory in case there is no file name */
+ if (!fname) {
+ shm->base = calloc(1, shm->size);
+ if (!shm->base)
+ return -1;
+ hdr = (jk_shm_h_rec_t *)shm->base;
+
+ memcpy(hdr->magic, shm_signature, 8);
+ hdr->workers = workers;
+ hdr->dynamic = dynamic;
+ return 0;
+ }
+ if (!attached)
+ flags |= (O_CREAT|O_TRUNC);
+ fd = open(fname, flags, 0666);
+ if (fd == -1) {
+ shm->size = 0;
+ return -1;
+ }
+
if (!attached) {
size_t size = lseek(fd, 0, SEEK_END);
if (size < shm->size) {
size = shm->size;
if (ftruncate(fd, shm->size)) {
close(fd);
+ shm->size = 0;
return -1;
}
}
}
if (lseek(fd, 0, SEEK_SET) != 0) {
close(fd);
+ shm->size = 0;
return -1;
}
shm->base = mmap(NULL, shm->size,
- PROT_READ | PROT_WRITE,
- MAP_FILE | MAP_SHARED,
- fd, 0);
+ PROT_READ | PROT_WRITE,
+ MAP_FILE | MAP_SHARED,
+ fd, 0);
if (shm->base == (void *)MAP_FAILED) {
shm->base = NULL;
}
if (!shm->base) {
close(fd);
+ shm->size = 0;
return -1;
}
- shm->filename = fname;
shm->fd = fd;
- shm->attached = attached;
/* Clear shared memory */
if (!attached) {
@@ -185,8 +203,12 @@
{
if (shm) {
if (shm->base) {
- munmap(shm->base, shm->size);
- close(shm->fd);
+ if (shm->fd >= 0) {
+ munmap(shm->base, shm->size);
+ close(shm->fd);
+ }
+ else
+ free(shm->base);
}
shm->base = NULL;
shm->fd = -1;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]