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 2005/02/12 12:32:13 UTC
cvs commit: jakarta-tomcat-connectors/jk/native/common jk_lb_worker.c jk_shm.c jk_shm.h
mturk 2005/02/12 03:32:13
Modified: jk/native/common jk_lb_worker.c jk_shm.c jk_shm.h
Log:
Simplify shared memory. If shmem is not defined use plain jk_pool instead.
Revision Changes Path
1.44 +5 -5 jakarta-tomcat-connectors/jk/native/common/jk_lb_worker.c
Index: jk_lb_worker.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_lb_worker.c,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -r1.43 -r1.44
--- jk_lb_worker.c 9 Feb 2005 12:34:13 -0000 1.43
+++ jk_lb_worker.c 12 Feb 2005 11:32:12 -0000 1.44
@@ -56,7 +56,7 @@
{
jk_worker_t *w;
/* Shared memory worker data */
- jk_shm_w_rec_t *s;
+ jk_shm_worker_t *s;
};
typedef struct worker_record worker_record_t;
@@ -74,7 +74,7 @@
JK_CRIT_SEC cs;
/* Shared memory worker data */
- jk_shm_w_rec_t *s;
+ jk_shm_worker_t *s;
};
typedef struct lb_worker lb_worker_t;
@@ -575,7 +575,7 @@
num_of_workers *
sizeof(worker_record_t));
for (i = 0; i < num_of_workers; i++) {
- p->lb_workers[i].s = jk_shm_worker_alloc();
+ p->lb_workers[i].s = jk_shm_alloc(&p->p, sizeof(jk_shm_worker_t));
if (p->lb_workers[i].s == NULL) {
JK_TRACE_EXIT(l);
return JK_FALSE;
@@ -776,7 +776,7 @@
private_data->buf,
sizeof(jk_pool_atom_t) * TINY_POOL_SIZE);
- private_data->s = jk_shm_worker_alloc();
+ private_data->s = jk_shm_alloc(&private_data->p, sizeof(jk_shm_worker_t));
if (!private_data->s) {
free(private_data);
JK_TRACE_EXIT(l);
1.8 +29 -60 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.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- jk_shm.c 7 Feb 2005 19:06:34 -0000 1.7
+++ jk_shm.c 12 Feb 2005 11:32:12 -0000 1.8
@@ -24,16 +24,17 @@
#include "jk_shm.h"
/** jk shm header record structure */
-struct jk_shm_h_rec
+struct jk_shm_header
{
/* Shared memory magic JK_SHM_MAGIC */
- char magic[8];
- int workers;
- int allocated;
- jk_shm_w_rec_t *pr[1];
- jk_shm_w_rec_t rr[1];
+ char magic[8];
+ size_t size;
+ size_t pos;
+ int childs;
+ char buf[1];
};
-typedef struct jk_shm_h_rec jk_shm_h_rec_t;
+
+typedef struct jk_shm_header jk_shm_header_t;
/** jk shm structure */
struct jk_shm
@@ -42,13 +43,13 @@
const char *filename;
int fd;
int attached;
- jk_shm_h_rec_t *hdr;
+ jk_shm_header_t *hdr;
};
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 jk_shm_t jk_shmem = { 0, NULL, -1, 0, NULL};
#if defined (WIN32) || defined(NETWARE)
@@ -59,17 +60,16 @@
return 0;
}
- jk_shmem.size = JK_SHM_ALIGN(sizeof(jk_shm_h_rec_t) + JK_SHM_MAX_WORKERS * sizeof(jk_shm_w_rec_t));
+ jk_shmem.size = JK_SHM_ALIGN(sizeof(jk_shm_header_t) + JK_SHM_SIZE);
- jk_shmem.hdr = (jk_shm_h_rec_t *)calloc(1, jk_shmem.size);
+ jk_shmem.hdr = (jk_shm_header_t *)calloc(1, jk_shmem.size);
if (!jk_shmem.hdr)
return -1;
jk_shmem.filename = "memory";
jk_shmem.fd = 0;
jk_shmem.attached = 0;
-
memcpy(jk_shmem.hdr->magic, shm_signature, 8);
- jk_shmem.hdr->workers = JK_SHM_MAX_WORKERS;
+ jk_shmem.hdr->size = JK_SHM_SIZE;
return 0;
}
@@ -77,6 +77,7 @@
{
if (!jk_shm_open(fname)) {
jk_shmem.attached = 1;
+ jk_shmem.hdr->childs++;
return 0;
}
else
@@ -122,18 +123,11 @@
/* Use plain memory in case there is no file name */
if (!fname) {
- jk_shmem.size = JK_SHM_ALIGN(sizeof(jk_shm_h_rec_t) + JK_SHM_MAX_WORKERS * sizeof(jk_shm_w_rec_t *));
- jk_shmem.hdr = calloc(1, jk_shmem.size);
- if (!jk_shmem.hdr)
- return -1;
- memcpy(jk_shmem.hdr->magic, shm_signature, 8);
- jk_shmem.hdr->workers = JK_SHM_MAX_WORKERS;
- jk_shmem.hdr->allocated = 0;
- jk_shmem.filename = "memory";
+ jk_shmem.filename = "memory";
return 0;
}
- jk_shmem.size = JK_SHM_ALIGN(sizeof(jk_shm_h_rec_t) + JK_SHM_MAX_WORKERS * sizeof(jk_shm_w_rec_t));
+ jk_shmem.size = JK_SHM_ALIGN(sizeof(jk_shm_header_t) + JK_SHM_SIZE);
if (!attached)
flags |= (O_CREAT|O_TRUNC);
@@ -179,9 +173,10 @@
if (!attached) {
memset(jk_shmem.hdr, 0, jk_shmem.size);
memcpy(jk_shmem.hdr->magic, shm_signature, 8);
- jk_shmem.hdr->workers = JK_SHM_MAX_WORKERS;
+ jk_shmem.hdr->size = JK_SHM_SIZE;
}
else {
+ jk_shmem.hdr->childs++;
/* TODO: check header magic */
}
return 0;
@@ -204,14 +199,6 @@
munmap((void *)jk_shmem.hdr, jk_shmem.size);
close(jk_shmem.fd);
}
- else {
- int i;
- for (i = 0; i < jk_shmem.hdr->allocated; i++) {
- if (jk_shmem.hdr->pr[i])
- free(jk_shmem.hdr->pr[i]);
- }
- free(jk_shmem.hdr);
- }
}
jk_shmem.hdr = NULL;
jk_shmem.fd = -1;
@@ -220,39 +207,21 @@
#endif
-jk_shm_w_rec_t *jk_shm_worker(int id)
+void *jk_shm_alloc(jk_pool_t *p, size_t size)
{
- jk_shm_w_rec_t *w = NULL;
- if (jk_shmem.hdr && id >= 0) {
- if (id < jk_shmem.hdr->allocated) {
- if (jk_shmem.fd >= 0)
- w = &(jk_shmem.hdr->rr[id]);
- else
- w = jk_shmem.hdr->pr[id];
- if (id != w->id)
- w = NULL;
- }
- }
- return w;
-}
+ void *rc = NULL;
-jk_shm_w_rec_t *jk_shm_worker_alloc()
-{
- jk_shm_w_rec_t *w = NULL;
if (jk_shmem.hdr) {
- if (jk_shmem.hdr->allocated < jk_shmem.hdr->workers) {
- jk_shmem.hdr->allocated++;
- if (jk_shmem.fd >= 0) {
- w = &(jk_shmem.hdr->rr[jk_shmem.hdr->allocated]);
- }
- else {
- jk_shmem.hdr->pr[jk_shmem.hdr->allocated] = calloc(1, sizeof(jk_shm_w_rec_t));
- w = jk_shmem.hdr->pr[jk_shmem.hdr->allocated];
- }
- w->id = jk_shmem.hdr->allocated;
+ size = JK_ALIGN_DEFAULT(size);
+ if ((jk_shmem.hdr->size - jk_shmem.hdr->pos) >= size) {
+ rc = &(jk_shmem.hdr->buf[jk_shmem.hdr->pos]);
+ jk_shmem.hdr->pos += size;
}
}
- return w;
+ else if (p)
+ rc = jk_pool_alloc(p, size);
+
+ return rc;
}
const char *jk_shm_name()
1.6 +7 -11 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.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- jk_shm.h 9 Feb 2005 12:33:13 -0000 1.5
+++ jk_shm.h 12 Feb 2005 11:32:12 -0000 1.6
@@ -45,11 +45,11 @@
/* Really huge numbers, but 512 workers should be enough */
#define JK_SHM_MAX_WORKERS 512
-
+#define JK_SHM_SIZE (1024 * 1024)
#define JK_SHM_ALIGN(x) JK_ALIGN(x, 1024)
/** jk shm worker record structure */
-struct jk_shm_w_rec
+struct jk_shm_worker
{
int id;
/* Number of currently busy channels */
@@ -88,7 +88,7 @@
/* Number of non 200 responses */
size_t errors;
};
-typedef struct jk_shm_w_rec jk_shm_w_rec_t;
+typedef struct jk_shm_worker jk_shm_worker_t;
const char *jk_shm_name();
@@ -105,14 +105,10 @@
*/
int jk_shm_attach(const char *fname);
-
-/* Return shm worker record
- */
-jk_shm_w_rec_t *jk_shm_worker(int id);
-
-/* allocate shm worker record
+/* allocate shm memory
+ * If there is no shm present the pool will be used instead
*/
-jk_shm_w_rec_t *jk_shm_worker_alloc();
+void *jk_shm_alloc(jk_pool_t *p, size_t size);
#ifdef __cplusplus
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org