cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
hgomez 2004/03/17 09:02:38 Modified:jk/native2/common jk_shm.c Log: Remove unused vars (thanks gcc -wall) no need to get name if it never used Revision ChangesPath 1.45 +1 -1 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.44 retrieving revision 1.45 diff -u -r1.44 -r1.45 --- jk_shm.c 16 Mar 2004 09:03:12 - 1.44 +++ jk_shm.c 17 Mar 2004 17:02:38 - 1.45 @@ -433,8 +433,8 @@ return JK_OK; } case SHM_DUMP: { -char *name=msg-getString( env, msg ); #if 0 +char *name=msg-getString( env, msg ); /* XXX do we realy need that */ jk2_shm_dump( env, shm, name ); #endif - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
hgomez 2004/03/17 09:03:48 Modified:jk/native2/common jk_shm.c Log: Security, init slot to NULL Revision ChangesPath 1.46 +1 -1 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.45 retrieving revision 1.46 diff -u -r1.45 -r1.46 --- jk_shm.c 17 Mar 2004 17:02:38 - 1.45 +++ jk_shm.c 17 Mar 2004 17:03:48 - 1.46 @@ -236,7 +236,7 @@ /* For now all slots are equal size */ int i; -jk_shm_slot_t *slot; +jk_shm_slot_t *slot = NULL; if (shm-head != NULL) { for (i = 0; i shm-head-lastSlot; i++) { - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
hgomez 2004/03/16 01:03:13 Modified:jk/native2/common jk_shm.c Log: add the getAttribute feature to shm object Provider by Guenter/NormW Revision ChangesPath 1.44 +24 -1 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.43 retrieving revision 1.44 diff -u -r1.43 -r1.44 --- jk_shm.c 15 Mar 2004 20:09:30 - 1.43 +++ jk_shm.c 16 Mar 2004 09:03:12 - 1.44 @@ -352,6 +352,25 @@ } +static char *jk2_shm_getAttributeInfo[] = {file, size, slots, useMemory, NULL}; + +static void * JK_METHOD jk2_shm_getAttribute(jk_env_t *env, jk_bean_t *mbean, char *name ) +{ +jk_shm_t *shm = (jk_shm_t *)mbean-object; + +if( strcmp( name, file )==0 ) { +return shm-fname; +} else if( strcmp( name, size ) == 0 ) { +return jk2_env_itoa( env, shm-size ); +} else if( strcmp( name, slots ) == 0 ) { +return jk2_env_itoa( env, shm-slotMaxCount ); +} else if( strcmp( name, useMemory ) == 0 ) { +return jk2_env_itoa( env, shm-inmem ); +} +return NULL; +} + + /** Copy a chunk of data into a named slot */ static int jk2_shm_writeSlot( jk_env_t *env, jk_shm_t *shm, @@ -444,7 +463,11 @@ result-setAttribute = jk2_shm_setAttribute; result-setAttributeInfo = jk2_shm_setAttributeInfo; -/* result-getAttribute=jk2_shm_getAttribute; */ +/* Add the following to this function - seems someone else */ +/* thought of it based on the 'comment' previously there */ +result-getAttributeInfo = jk2_shm_getAttributeInfo; +result-getAttribute = jk2_shm_getAttribute; +result-multiValueInfo = NULL; shm-mbean = result; result-object = shm; result-invoke=jk2_shm_invoke; - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
mturk 2004/03/15 12:09:30 Modified:jk/native2/common jk_shm.c Log: Supress duplicate initialization for shm, that causes duplicate shm initialization. There is also unneded call to shm-init inside the workerEnv-parentInit, since it is caled after workerEnv-init, but now it doesn't mater. Revision ChangesPath 1.43 +6 -0 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.42 retrieving revision 1.43 diff -u -r1.42 -r1.43 --- jk_shm.c 13 Mar 2004 08:47:31 - 1.42 +++ jk_shm.c 15 Mar 2004 20:09:30 - 1.43 @@ -141,6 +141,12 @@ int rv=JK_OK; +/* In case the shm has been initialized already + * for the current process. + */ +if (shm-head shm-image) +return rv; + shm-privateData = NULL; if (shm-fname == NULL) { - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
As of this commit my shm file rights problem on FreeBSD Apache/2.0.48 prefork is gone. ;-) I've also tested both anon and file shm on OpenBSD Apache/1.3.29 successfully. The new shm implementation is looking good to me. -Kurt - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Monday, March 15, 2004 3:09 PM Subject: cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c mturk 2004/03/15 12:09:30 Modified:jk/native2/common jk_shm.c Log: Supress duplicate initialization for shm, that causes duplicate shm initialization. There is also unneded call to shm-init inside the workerEnv-parentInit, since it is caled after workerEnv-init, but now it doesn't mater. Revision ChangesPath 1.43 +6 -0 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.42 retrieving revision 1.43 diff -u -r1.42 -r1.43 --- jk_shm.c 13 Mar 2004 08:47:31 - 1.42 +++ jk_shm.c 15 Mar 2004 20:09:30 - 1.43 @@ -141,6 +141,12 @@ int rv=JK_OK; +/* In case the shm has been initialized already + * for the current process. + */ +if (shm-head shm-image) +return rv; + shm-privateData = NULL; if (shm-fname == NULL) { - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
mturk 2004/03/13 00:47:31 Modified:jk/native2/common jk_shm.c Log: Change the getSlot loop starting from index 0, not 1. Revision ChangesPath 1.42 +1 -1 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.41 retrieving revision 1.42 diff -u -r1.41 -r1.42 --- jk_shm.c 13 Mar 2004 07:32:37 - 1.41 +++ jk_shm.c 13 Mar 2004 08:47:31 - 1.42 @@ -233,7 +233,7 @@ jk_shm_slot_t *slot; if (shm-head != NULL) { -for (i = 1; i shm-head-lastSlot; i++) { +for (i = 0; i shm-head-lastSlot; i++) { slot = shm-getSlot(env, shm, i); if (strncmp(slot-name, name, strlen(name)) == 0) { env-l-jkLog(env, env-l, JK_LOG_INFO, - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
mturk 2004/03/12 11:15:56 Modified:jk/native2/common jk_shm.c Log: Total rewrite... Allows using anonymous shared memory or file based. Also allow usage of raw memory in case there is no shmem support. Added two new setup direcives: slots (manages max number of slots), and memory that when set uses malloc'd memory instead shmem. If the file name starts with 'anon' try using anonymous memory. Shmem uses create/attach mechanism so please test. Revision ChangesPath 1.40 +205 -370 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.39 retrieving revision 1.40 diff -u -r1.39 -r1.40 --- jk_shm.c 11 Mar 2004 15:32:38 - 1.39 +++ jk_shm.c 12 Mar 2004 19:15:56 - 1.40 @@ -15,14 +15,6 @@ */ /** - * Scoreboard - used for communication on multi-process servers. - * - * This is an optional component - will be enabled only if APR is used. - * The code is cutpasted from apache and mod_jserv. - * - * - * - * @author Jserv and Apache people */ #include jk_global.h @@ -30,23 +22,11 @@ #include jk_pool.h #include jk_shm.h -/* global.h will include apr.h. If APR and mmap is compiled in, we'll use - it. If APR is not availalbe, we use mmap directly - the code worked fine - for jserv. -*/ -#if APR_HAS_MMAP - -#include apr_mmap.h -#include apr_file_io.h -#include apr_file_info.h +#include apr_shm.h +#include apr_rmm.h +#include apr_errno.h #include apr_general.h - -#elif defined(HAVE_MMAP) !defined(WIN32) - -#include sys/mman.h -#include fcntl.h - -#endif +#include apr_lib.h #define SHM_WRITE_SLOT 2 @@ -54,276 +34,147 @@ #define SHM_DUMP 6 -#if (APR_HAS_MMAP == 1) - -static int JK_METHOD jk2_shm_destroy(jk_env_t *env, jk_shm_t *shm) +static int JK_METHOD jk2_shm_destroy(jk_env_t *env, jk_shm_t *shmem) { -apr_mmap_t *aprShm=(apr_mmap_t *)shm-privateData; +apr_status_t rv = APR_SUCCESS; +#if APR_HAS_SHARED_MEMORY +apr_shm_t *shm = (apr_shm_t *)shmem-privateData; + +if (shm) { +if (shmem-attached) +rv = apr_shm_detach(shm); +else +rv = apr_shm_destroy(shm); +} +#endif +shmem-head = NULL; +shmem-image = NULL; -if( aprShm==NULL ) -return JK_OK; - -return apr_mmap_delete(aprShm); +return rv == APR_SUCCESS ? JK_OK : JK_ERR; } -static int jk2_shm_create(jk_env_t *env, jk_shm_t *shm) +static int jk2_shm_create(jk_env_t *env, jk_shm_t *shmem) { -apr_status_t rc; -apr_file_t *file; -apr_finfo_t finfo; -apr_mmap_t *aprMmap; +apr_status_t rc = APR_EGENERAL; +apr_shm_t *shm = NULL; apr_pool_t *globalShmPool; -globalShmPool= (apr_pool_t *)env-getAprPool( env ); +globalShmPool = (apr_pool_t *)env-getAprPool(env); -if( globalShmPool==NULL ) +if (!globalShmPool) { return JK_ERR; - -/* Check if the scoreboard is in a note. That's the only way we - can get HP-UX to work -*/ -apr_pool_userdata_get( shm-image, mod_jk_shm,globalShmPool ); -if( shm-image!=NULL ) { -shm-head = (jk_shm_head_t *)shm-image; - -if( shm-mbean-debug 0 ) -env-l-jkLog(env, env-l, JK_LOG_DEBUG, - shm.create(): GLOBAL_SHM %#lx\n, shm-image ); -return JK_OK; -} else { -if( shm-mbean-debug 0 ) -env-l-jkLog(env, env-l, JK_LOG_DEBUG, - shm.create(): NO GLOBAL_SHM %#lx\n, shm-image ); } - -/* First make sure the file exists and is big enough - */ -rc=apr_file_open( file, shm-fname, - APR_READ | APR_WRITE | APR_CREATE | APR_BINARY, - APR_OS_DEFAULT, globalShmPool); -if (rc) { -char error[256]; -apr_strerror( rc, error, 256 ); - -env-l-jkLog(env, env-l, JK_LOG_ERROR, - shm.create(): error opening file %s %d %s\n, - shm-fname, rc, error ); -shm-privateData=NULL; -return JK_ERR; -} - -rc=apr_file_info_get(finfo, APR_FINFO_SIZE, file); - -if( shm-mbean-debug 0 ) -env-l-jkLog(env, env-l, JK_LOG_DEBUG, - shm.create(): file open %s %d %d\n, shm-fname, shm-size, (int) finfo.size ); - -if( (int) finfo.size shm-size ) { -char bytes[1024]; -apr_size_t toWrite = (apr_size_t)(shm-size-finfo.size); -apr_off_t off=0; - -memset( bytes, 0, 1024 ); -apr_file_seek( file, APR_END, off);
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
mturk 2004/03/12 23:32:37 Modified:jk/native2/common jk_shm.c Log: Change memory directive to useMemory. Revision ChangesPath 1.41 +2 -2 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.40 retrieving revision 1.41 diff -u -r1.40 -r1.41 --- jk_shm.c 12 Mar 2004 19:15:56 - 1.40 +++ jk_shm.c 13 Mar 2004 07:32:37 - 1.41 @@ -319,7 +319,7 @@ static char *jk2_shm_setAttributeInfo[] = {resetEndpointStats, file, size, - slots, memory, + slots, useMemory, NULL}; static int JK_METHOD jk2_shm_setAttribute(jk_env_t *env, jk_bean_t *mbean, @@ -334,7 +334,7 @@ shm-size=atoi(value); } else if( strcmp( slots, name ) == 0 ) { shm-slotMaxCount=atoi(value); -} else if( strcmp( memory, name ) == 0 ) { +} else if( strcmp( useMemory, name ) == 0 ) { shm-inmem=atoi(value); } else if( strcmp( resetEndpointStats, name ) == 0 ) { if( strcmp( value, 1 )==0 ) - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
jfclere 2004/03/11 07:32:38 Modified:jk/native2/common jk_shm.c Log: Arrange some castings and check the total size. Revision ChangesPath 1.39 +16 -11jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.38 retrieving revision 1.39 diff -u -r1.38 -r1.39 --- jk_shm.c 27 Feb 2004 14:25:32 - 1.38 +++ jk_shm.c 11 Mar 2004 15:32:38 - 1.39 @@ -68,7 +68,7 @@ static int jk2_shm_create(jk_env_t *env, jk_shm_t *shm) { -int rc; +apr_status_t rc; apr_file_t *file; apr_finfo_t finfo; apr_mmap_t *aprMmap; @@ -77,7 +77,7 @@ globalShmPool= (apr_pool_t *)env-getAprPool( env ); if( globalShmPool==NULL ) -return JK_FALSE; +return JK_ERR; /* Check if the scoreboard is in a note. That's the only way we can get HP-UX to work @@ -102,7 +102,7 @@ rc=apr_file_open( file, shm-fname, APR_READ | APR_WRITE | APR_CREATE | APR_BINARY, APR_OS_DEFAULT, globalShmPool); -if (rc!=JK_OK) { +if (rc) { char error[256]; apr_strerror( rc, error, 256 ); @@ -110,16 +110,16 @@ shm.create(): error opening file %s %d %s\n, shm-fname, rc, error ); shm-privateData=NULL; -return rc; +return JK_ERR; } rc=apr_file_info_get(finfo, APR_FINFO_SIZE, file); if( shm-mbean-debug 0 ) env-l-jkLog(env, env-l, JK_LOG_DEBUG, - shm.create(): file open %s %d %d\n, shm-fname, shm-size, finfo.size ); + shm.create(): file open %s %d %d\n, shm-fname, shm-size, (int) finfo.size ); -if( finfo.size shm-size ) { +if( (int) finfo.size shm-size ) { char bytes[1024]; apr_size_t toWrite = (apr_size_t)(shm-size-finfo.size); apr_off_t off=0; @@ -151,15 +151,15 @@ rc=apr_mmap_create( aprMmap, file, (apr_off_t)0, (apr_size_t)finfo.size, APR_MMAP_READ | APR_MMAP_WRITE, globalShmPool ); -if( rc!=JK_OK ) { +if( rc ) { char error[256]; apr_strerror( rc, error, 256 ); env-l-jkLog(env, env-l, JK_LOG_ERROR, shm.create(): error creating %s %d %d %#lx %s\n, - shm-fname, finfo.size, rc, globalShmPool, error ); + shm-fname, (int) finfo.size, (int) rc, globalShmPool, error ); shm-privateData=NULL; -return rc; +return JK_ERR; } shm-privateData=aprMmap; @@ -404,11 +404,16 @@ */ jk_shm_slot_t * JK_METHOD jk2_shm_getSlot(struct jk_env *env, struct jk_shm *shm, int pos) { +char *ptr; if( pos==0 ) return NULL; if( shm-image==NULL ) return NULL; if( pos shm-slotMaxCount ) return NULL; +if( pos * shm-slotSize shm-size ) return NULL; + /* Pointer aritmethic, I hope it's right */ -return (jk_shm_slot_t *)((long)shm-image + (pos * shm-slotSize)); +ptr = (void *) shm-image; +ptr = ptr + (pos * shm-slotSize); +return ((jk_shm_slot_t *) ptr); } jk_shm_slot_t * JK_METHOD jk2_shm_createSlot(struct jk_env *env, struct jk_shm *shm, @@ -559,7 +564,7 @@ switch( code ) { case SHM_WRITE_SLOT: { char *instanceName=msg-getString( env, msg ); -char *buf=msg-buf; +char *buf=(char *)msg-buf; int len=msg-len; return jk2_shm_writeSlot( env, shm, instanceName, buf, len ); - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
hgomez 2004/02/27 06:25:32 Modified:jk/native2/common jk_shm.c Log: Revert to old code until APR shm problem is fixed... Revision ChangesPath 1.38 +85 -0 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.37 retrieving revision 1.38 diff -u -r1.37 -r1.38 --- jk_shm.c 24 Feb 2004 08:44:40 - 1.37 +++ jk_shm.c 27 Feb 2004 14:25:32 - 1.38 @@ -179,6 +179,91 @@ return JK_OK; } +#elif defined(HAVE_MMAP) !defined(WIN32) + +static int JK_METHOD jk2_shm_destroy(jk_env_t *env, jk_shm_t *shm) +{ +caddr_t shmf=(caddr_t)shm-privateData; + +munmap(shmf, shm-size); + +return JK_OK; +} + +static int jk2_shm_create(jk_env_t *env, jk_shm_t *shm) +{ +int rc; +struct stat filestat; + +int fd = open(shm-fname, O_RDWR|O_CREAT, 0777); + +if (fd == -1) { +env-l-jkLog(env, env-l, JK_LOG_ERROR, + shm.create(): Can't open %s %d %s\n, + shm-fname, errno, strerror( errno )); +return JK_ERR; +} + +rc=stat( shm-fname, filestat); +if ( rc == -1) { +env-l-jkLog(env, env-l, JK_LOG_ERROR, + shm.create(): Can't stat %s %d %s\n, + shm-fname, errno, strerror( errno )); +return JK_ERR; +} + +if( shm-mbean-debug 0 ) +env-l-jkLog(env, env-l, JK_LOG_DEBUG, + shm.create(): file open %s %d %d\n, shm-fname, shm-size, filestat.st_size ); + +if (filestat.st_size shm-size ) { +char bytes[1024]; +int toWrite=shm-size - filestat.st_size; + +memset( bytes, 0, 1024 ); +lseek(fd, 0, SEEK_END); + +while( toWrite 0 ) { +int written; +written=write(fd, bytes, 1024); +if( written == -1 ) { +env-l-jkLog(env, env-l, JK_LOG_ERROR, + shm.create(): Can't write %s %d %s\n, + shm-fname, errno, strerror( errno )); +return JK_ERR; +} +toWrite-=written; +} + +rc=stat( shm-fname, filestat); +if ( rc == -1) { +env-l-jkLog(env, env-l, JK_LOG_ERROR, + shm.create(): Can't stat2 %s %d %s\n, + shm-fname, errno, strerror( errno )); +return JK_ERR; + } +} + +shm-privateData = mmap(NULL, filestat.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + +if (shm-privateData == (caddr_t)-1 || +shm-privateData == NULL ) { +env-l-jkLog(env, env-l, JK_LOG_ERROR, + shm.create(): Can't mmap %s %d %s\n, + shm-fname, errno, strerror( errno )); + +close(fd); +return JK_ERR; +} + +shm-image = (void *)shm-privateData; +shm-head = (jk_shm_head_t *)shm-image; + +close(fd); + +return JK_OK; +} + #else - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
costin 2003/03/03 23:18:05 Modified:jk/native2/common jk_shm.c Log: Added a new attribute. Setting it will reset the stats. Hacky - but I getting methods to work from JMX is not yet done. Revision ChangesPath 1.33 +40 -3 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- jk_shm.c 4 Feb 2003 07:39:58 - 1.32 +++ jk_shm.c 4 Mar 2003 07:18:04 - 1.33 @@ -492,18 +492,54 @@ return 0; } +static void jk2_shm_resetEndpointStats(jk_env_t *env, struct jk_shm *shm) +{ +int i, j; + +if( shm==NULL || shm-head==NULL) { +return; +} + +for( i=1; i shm-head-lastSlot; i++ ) { +jk_shm_slot_t *slot= shm-getSlot( env, shm, i ); + +if( slot==NULL ) continue; + +if( strncmp( slot-name, epStat, 6 ) == 0 ) { +/* This is an endpoint slot */ +void *data=slot-data; + +for( j=0; jslot-structCnt ; j++ ) { +jk_stat_t *statArray=(jk_stat_t *)data; +jk_stat_t *stat=statArray + j; + +stat-reqCnt=0; +stat-errCnt=0; +#ifdef HAS_APR +stat-totalTime=0; +stat-maxTime=0; +#endif +} +} +} +} + +static char *jk2_shm_setAttributeInfo[]={resetEndpointStats, file, size, NULL }; static int JK_METHOD jk2_shm_setAttribute( jk_env_t *env, jk_bean_t *mbean, char *name, void *valueP ) { jk_shm_t *shm=(jk_shm_t *)mbean-object; char *value=(char *)valueP; if( strcmp( file, name ) == 0 ) { -shm-fname=value; +shm-fname=value; } else if( strcmp( size, name ) == 0 ) { -shm-size=atoi(value); +shm-size=atoi(value); +} else if( strcmp( resetEndpointStats, name ) == 0 ) { +if( strcmp( value, 1 )==0 ) +jk2_shm_resetEndpointStats( env, shm ); } else { -return JK_ERR; +return JK_ERR; } return JK_OK; @@ -596,6 +632,7 @@ shm-slotMaxCount=DEFAULT_SLOT_COUNT; result-setAttribute=jk2_shm_setAttribute; +result-setAttributeInfo=jk2_shm_setAttributeInfo; /* result-getAttribute=jk2_shm_getAttribute; */ shm-mbean=result; result-object=shm; - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
mturk 2003/01/23 04:15:42 Modified:jk/native2/common jk_shm.c Log: Report the missing shm file as INFO not ERROR, cause it is obvious that the user didn't specify the [shm] in the config. Revision ChangesPath 1.31 +9 -7 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- jk_shm.c 27 Sep 2002 13:07:28 - 1.30 +++ jk_shm.c 23 Jan 2003 12:15:42 - 1.31 @@ -262,7 +262,7 @@ int toWrite=shm-size - filestat.st_size; memset( bytes, 0, 1024 ); - lseek(fd, 0, SEEK_END); +lseek(fd, 0, SEEK_END); while( toWrite 0 ) { int written; @@ -282,7 +282,7 @@ shm.create(): Can't stat2 %s %d %s\n, shm-fname, errno, strerror( errno )); return JK_ERR; - } +} } shm-privateData = mmap(NULL, filestat.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); @@ -293,7 +293,7 @@ shm.create(): Can't mmap %s %d %s\n, shm-fname, errno, strerror( errno )); - close(fd); +close(fd); return JK_ERR; } @@ -330,7 +330,7 @@ shm-privateData=NULL; if( shm-fname==NULL ) { -env-l-jkLog(env, env-l, JK_LOG_ERROR, shm.init(): No file\n); +env-l-jkLog(env, env-l, JK_LOG_INFO, shm.init(): shm file not specified\n); return JK_ERR; } @@ -471,6 +471,8 @@ /* XXX interprocess sync */ slotId=shm-head-lastSlot++; } +else +return NULL; slot=shm-getSlot( env, shm, slotId ); if( slot==NULL ) return NULL; @@ -497,11 +499,11 @@ char *value=(char *)valueP; if( strcmp( file, name ) == 0 ) { - shm-fname=value; +shm-fname=value; } else if( strcmp( size, name ) == 0 ) { - shm-size=atoi(value); +shm-size=atoi(value); } else { - return JK_ERR; +return JK_ERR; } return JK_OK; -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
hgomez 2002/09/24 15:41:48 Modified:jk/native2/common jk_shm.c Log: AS/400 back port from 1.2.0. BTW, the AS/400 code should be checked later, since we should know if we have to convert from EBCDIC to ASCII here... Revision ChangesPath 1.29 +13 -1 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- jk_shm.c 8 Jul 2002 13:37:10 - 1.28 +++ jk_shm.c 24 Sep 2002 22:41:48 - 1.29 @@ -417,7 +417,19 @@ if( name==NULL ) return JK_ERR; -f=fopen(name, a+); +/* + * XXX + * To be checked later, AS400 may need no ccsid + * conversions applied if pure binary, for now + * I assume stream is EBCDIC and need to be converted + * in standard ASCII using codepage 819 + */ +#ifdef AS400 +f = fopen(name, a+, o_ccsid=819); +#else +f = fopen(name, a+); +#endif + fwrite( shm-head, 1, shm-size, f ); fclose( f ); -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
mturk 2002/07/08 06:37:10 Modified:jk/native2/common jk_shm.c Log: no message Revision ChangesPath 1.28 +8 -8 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- jk_shm.c 12 Jun 2002 12:40:17 - 1.27 +++ jk_shm.c 8 Jul 2002 13:37:10 - 1.28 @@ -128,12 +128,12 @@ shm-head = (jk_shm_head_t *)shm-image; if( shm-mbean-debug 0 ) -env-l-jkLog(env, env-l, JK_LOG_ERROR, +env-l-jkLog(env, env-l, JK_LOG_DEBUG, shm.create(): GLOBAL_SHM %#lx\n, shm-image ); return JK_OK; } else { if( shm-mbean-debug 0 ) -env-l-jkLog(env, env-l, JK_LOG_ERROR, +env-l-jkLog(env, env-l, JK_LOG_DEBUG, shm.create(): NO GLOBAL_SHM %#lx\n, shm-image ); } @@ -157,7 +157,7 @@ rc=apr_file_info_get(finfo, APR_FINFO_SIZE, file); if( shm-mbean-debug 0 ) -env-l-jkLog(env, env-l, JK_LOG_INFO, +env-l-jkLog(env, env-l, JK_LOG_DEBUG, shm.create(): file open %s %d %d\n, shm-fname, shm-size, finfo.size ); if( finfo.size shm-size ) { @@ -254,7 +254,7 @@ } if( shm-mbean-debug 0 ) -env-l-jkLog(env, env-l, JK_LOG_INFO, +env-l-jkLog(env, env-l, JK_LOG_DEBUG, shm.create(): file open %s %d %d\n, shm-fname, shm-size, filestat.st_size ); if (filestat.st_size shm-size ) { @@ -342,7 +342,7 @@ } if( shm-mbean-debug 0 ) { -env-l-jkLog(env, env-l, JK_LOG_INFO, shm.init(): file=%s size=%d\n, +env-l-jkLog(env, env-l, JK_LOG_DEBUG, shm.init(): file=%s size=%d\n, shm-fname, shm-size); } @@ -362,7 +362,7 @@ } if( shm-mbean-debug 0 ) -env-l-jkLog(env, env-l, JK_LOG_INFO, +env-l-jkLog(env, env-l, JK_LOG_DEBUG, shm.create(): shm created %#lx\n, shm-head ); return JK_OK; @@ -383,7 +383,7 @@ shm-head-lastSlot = 1; if( shm-mbean-debug 0 ) -env-l-jkLog(env, env-l, JK_LOG_INFO, shm.init() Reset %s %#lx\n, +env-l-jkLog(env, env-l, JK_LOG_DEBUG, shm.init() Reset %s %#lx\n, shm-fname, shm-image); return JK_OK; @@ -538,7 +538,7 @@ jk_shm_t *shm=(jk_shm_t *)bean-object; if( shm-mbean-debug 0 ) -env-l-jkLog(env, env-l, JK_LOG_INFO, +env-l-jkLog(env, env-l, JK_LOG_DEBUG, shm.%d() \n, code); switch( code ) { -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c jk_workerEnv.c jk_worker_ajp13.c
jfclere 2002/06/12 05:40:17 Modified:jk/native2/common jk_shm.c jk_workerEnv.c jk_worker_ajp13.c Log: Prevent the core when getSlot() failed. Revision ChangesPath 1.27 +10 -8 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- jk_shm.c 10 Jun 2002 21:55:06 - 1.26 +++ jk_shm.c 12 Jun 2002 12:40:17 - 1.27 @@ -447,16 +447,18 @@ int slotId; int i; jk_shm_slot_t *slot; - -for( i=1; ishm-head-lastSlot; i++ ) { -slot= shm-getSlot( env, shm, i ); -if( strncmp( slot-name, name, strlen(name) ) == 0 ) { -return slot; + +if (shm-head!=NULL) { +for( i=1; ishm-head-lastSlot; i++ ) { +slot= shm-getSlot( env, shm, i ); +if( strncmp( slot-name, name, strlen(name) ) == 0 ) { +return slot; +} } +/* New slot */ +/* XXX interprocess sync */ +slotId=shm-head-lastSlot++; } -/* New slot */ -/* XXX interprocess sync */ -slotId=shm-head-lastSlot++; slot=shm-getSlot( env, shm, slotId ); if( slot==NULL ) return NULL; 1.54 +3 -2 jakarta-tomcat-connectors/jk/native2/common/jk_workerEnv.c Index: jk_workerEnv.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_workerEnv.c,v retrieving revision 1.53 retrieving revision 1.54 diff -u -r1.53 -r1.54 --- jk_workerEnv.c10 Jun 2002 21:55:06 - 1.53 +++ jk_workerEnv.c12 Jun 2002 12:40:17 - 1.54 @@ -580,7 +580,8 @@ wEnv-endpointMap-add( env, wEnv-endpointMap, ep-mbean-localName, ep ); ep-mbean-id=pos; -ep-mbean-init( env, ep-mbean ); +if (ep-mbean-init( env, ep-mbean )==JK_ERR) +return JK_ERR; return JK_OK; } 1.32 +14 -5 jakarta-tomcat-connectors/jk/native2/common/jk_worker_ajp13.c Index: jk_worker_ajp13.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_worker_ajp13.c,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- jk_worker_ajp13.c 10 Jun 2002 21:55:06 - 1.31 +++ jk_worker_ajp13.c 12 Jun 2002 12:40:17 - 1.32 @@ -561,6 +561,7 @@ { jk_endpoint_t *e = NULL; jk_bean_t *jkb; +int ret; if( ajp13-secret ==NULL ) { } @@ -596,17 +597,23 @@ *eP = e; -ajp13-workerEnv-addEndpoint( env, ajp13-workerEnv, e ); +ret = ajp13-workerEnv-addEndpoint( env, ajp13-workerEnv, e ); } if( ajp13-cs != NULL ) ajp13-cs-unLock( env, ajp13-cs ); -if( ajp13-mbean-debug 0 ) -env-l-jkLog(env, env-l, JK_LOG_INFO, +if( ajp13-mbean-debug 0 ) { +if (ret==JK_OK) +env-l-jkLog(env, env-l, JK_LOG_INFO, ajp13.getEndpoint(): Created endpoint %s %s \n, ajp13-mbean-name, jkb-name); +else +env-l-jkLog(env, env-l, JK_LOG_INFO, + ajp13.getEndpoint(): endpoint creation %s %s failed\n, + ajp13-mbean-name, jkb-name); +} -return JK_OK; +return ret; } /* @@ -620,7 +627,9 @@ jk_endpoint_t *e; /* Get endpoint from the pool */ -jk2_worker_ajp13_getEndpoint( env, w, e ); +err=jk2_worker_ajp13_getEndpoint( env, w, e ); +if (err!=JK_OK) + return err; #ifdef HAS_APR if( s-uriEnv!=NULL s-uriEnv-timing == JK_TRUE ) { -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c jk_worker_ajp13.c jk_workerEnv.c
nacho 2002/06/08 17:50:49 Modified:jk/native2/include jk_requtil.h jk/native2/common jk_shm.c jk_worker_ajp13.c jk_workerEnv.c Log: * No warnings Revision ChangesPath 1.7 +10 -0 jakarta-tomcat-connectors/jk/native2/include/jk_requtil.h Index: jk_requtil.h === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/include/jk_requtil.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- jk_requtil.h 19 Apr 2002 02:36:23 - 1.6 +++ jk_requtil.h 9 Jun 2002 00:50:48 - 1.7 @@ -189,6 +189,16 @@ int jk_requtil_base64EncodeCert(char *encoded, const unsigned char *string, int len); +int jk2_serialize_postHead(jk_env_t *env, jk_msg_t *msg, + jk_ws_service_t *r, + jk_endpoint_t *ae); + +int jk2_serialize_request13(jk_env_t *env, jk_msg_t *msg, +jk_ws_service_t *s, +jk_endpoint_t *ae); + + + #ifdef __cplusplus } #endif /* __cplusplus */ 1.24 +0 -1 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- jk_shm.c 31 May 2002 19:19:45 - 1.23 +++ jk_shm.c 9 Jun 2002 00:50:49 - 1.24 @@ -536,7 +536,6 @@ jk_msg_t *msg, int raw) { jk_shm_t *shm=(jk_shm_t *)bean-object; -int rc; if( shm-mbean-debug 0 ) env-l-jkLog(env, env-l, JK_LOG_INFO, 1.29 +1 -2 jakarta-tomcat-connectors/jk/native2/common/jk_worker_ajp13.c Index: jk_worker_ajp13.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_worker_ajp13.c,v retrieving revision 1.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- jk_worker_ajp13.c 31 May 2002 22:51:28 - 1.28 +++ jk_worker_ajp13.c 9 Jun 2002 00:50:49 - 1.29 @@ -72,6 +72,7 @@ #include jk_service.h #include jk_env.h #include jk_objCache.h +#include jk_reqUtil.h #include jk_registry.h #define AJP_DEF_RETRY_ATTEMPTS(2) @@ -560,7 +561,6 @@ { jk_endpoint_t *e = NULL; jk_bean_t *jkb; -int csOk; if( ajp13-secret ==NULL ) { } @@ -789,7 +789,6 @@ { jk_worker_t *w=(jk_worker_t *)pool-calloc(env, pool, sizeof(jk_worker_t)); jk_bean_t *jkb; -int i; if (name == NULL || w == NULL) { env-l-jkLog(env, env-l, JK_LOG_ERROR, 1.52 +1 -3 jakarta-tomcat-connectors/jk/native2/common/jk_workerEnv.c Index: jk_workerEnv.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_workerEnv.c,v retrieving revision 1.51 retrieving revision 1.52 diff -u -r1.51 -r1.52 --- jk_workerEnv.c31 May 2002 19:19:45 - 1.51 +++ jk_workerEnv.c9 Jun 2002 00:50:49 - 1.52 @@ -59,7 +59,7 @@ * Description: Workers controller * * Author: Gal Shachor [EMAIL PROTECTED] * * Author: Henri Gomez [EMAIL PROTECTED] * - * Version: $Revision: 1.51 $ * + * Version: $Revision: 1.52 $ * ***/ #include jk_env.h @@ -591,7 +591,6 @@ { int err=JK_OK; jk_worker_t *oldW = NULL; -int csOk; w-workerEnv=wEnv; @@ -653,7 +652,6 @@ { jk_workerEnv_t *wEnv; jk_bean_t *jkb; -int csOk; wEnv=(jk_workerEnv_t *)pool-calloc( env, pool, sizeof( jk_workerEnv_t )); -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
nacho 2002/06/08 18:55:28 Modified:jk/native2/common jk_shm.c Log: * No warnings Revision ChangesPath 1.25 +0 -2 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- jk_shm.c 9 Jun 2002 00:50:49 - 1.24 +++ jk_shm.c 9 Jun 2002 01:55:28 - 1.25 @@ -315,8 +315,6 @@ static int jk2_shm_create(jk_env_t *env, jk_shm_t *shm) { -int rc; - return JK_ERR; } -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
nacho 02/05/19 10:37:08 Modified:jk/native2/common jk_shm.c Log: * Fixed problems when creating the shm file, due to unsigned arithmetics.. 1000-1024=4.356.357.838.652 :) Revision ChangesPath 1.18 +6 -2 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- jk_shm.c 16 May 2002 23:48:27 - 1.17 +++ jk_shm.c 19 May 2002 17:37:08 - 1.18 @@ -171,7 +171,11 @@ shm-fname, errno, strerror( errno )); return JK_ERR; } -toWrite-=written; +if( toWrite written ){ +toWrite=0; +}else{ +toWrite-=written; +} } rc=apr_file_info_get(finfo, APR_FINFO_SIZE, file); @@ -248,7 +252,7 @@ int toWrite=shm-size - filestat.st_size; memset( bytes, 0, 1024 ); - lseek(fd, 0, SEEK_END); + lseek(fd, 0, SEEK_END); while( toWrite 0 ) { int written; -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
costin 02/05/16 14:02:44 Modified:jk/native2/common jk_shm.c Log: Refactoring of jk_shm, using apr_mmap instead of apr_shm. Also added code for apache1.3 ( or if apr is not compiled ) - it's cutpaste from jserv, it work wherever jserv worked. While apr_shm may work on more platforms, I think it's better to use mmap since JDK1.4 will have this built-in and most platforms do have it. If mmap is not available - we just loose the ability to report statistics, and the eventual shm channel ( but jk will still work ). Revision ChangesPath 1.16 +261 -153 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- jk_shm.c 15 May 2002 19:45:45 - 1.15 +++ jk_shm.c 16 May 2002 21:02:44 - 1.16 @@ -71,30 +71,24 @@ #include jk_pool.h #include jk_shm.h -#ifdef HAS_APR +/* global.h will include apr.h. If APR and mmap is compiled in, we'll use + it. If APR is not availalbe, we use mmap directly - the code worked fine + for jserv. +*/ +#if APR_HAS_MMAP + +#include apr_mmap.h +#include apr_file_io.h +#include apr_file_info.h +static apr_pool_t *globalShmPool; -#include apr.h -#include apr_strings.h -#include apr_general.h -#include apr_portable.h -#include apr_lib.h +#elif defined(HAVE_MMAP) !defined(WIN32) -#define APR_WANT_STRFUNC -#include apr_want.h +#include sys/mman.h +#include fcntl.h -#if APR_HAVE_SYS_TYPES_H -#include sys/types.h #endif -#if APR_HAS_SHARED_MEMORY - -#include apr_shm.h -#include apr_atomic.h - -/* Inter-process synchronization - to create the slots */ -#include apr_proc_mutex.h - -static apr_pool_t *globalShmPool; #define SHM_SET_ATTRIBUTE 0 #define SHM_WRITE_SLOT 2 @@ -102,32 +96,265 @@ #define SHM_DETACH 4 #define SHM_RESET 5 #define SHM_DUMP 6 -#define SHM_DESTROY 7 +#ifdef APR_HAS_MMAP + static int jk2_shm_destroy(jk_env_t *env, jk_shm_t *shm) { -apr_shm_t *aprShm=(apr_shm_t *)shm-privateData; +apr_mmap_t *aprShm=(apr_mmap_t *)shm-privateData; -return apr_shm_destroy(aprShm); +if( aprShm==NULL ) +return JK_OK; + +return apr_mmap_delete(aprShm); } -static int JK_METHOD jk2_shm_detach(jk_env_t *env, jk_shm_t *shm) +static int jk2_shm_create(jk_env_t *env, jk_shm_t *shm) { -apr_shm_t *aprShm=(apr_shm_t *)shm-privateData; +int rc; +apr_file_t *file; +apr_finfo_t finfo; +apr_size_t size; +apr_mmap_t *aprMmap; + +/* We don't want to have to recreate the scoreboard after + * restarts, so we'll create a global pool and never clean it. + */ +if( globalShmPool==NULL ) { +/* Make sure apr is initialized */ +apr_initialize(); +rc = apr_pool_create(globalShmPool, NULL); +if (rc != APR_SUCCESS || globalShmPool==NULL ) { +env-l-jkLog(env, env-l, JK_LOG_ERROR, + Unable to create global pool for jk_shm\n); +return rc; +} +} + +/* First make sure the file exists and is big enough + */ +rc=apr_file_open( file, shm-fname, + APR_READ | APR_WRITE | APR_CREATE | APR_BINARY, + APR_OS_DEFAULT, globalShmPool); +if (rc!=JK_OK) { +char error[256]; +apr_strerror( rc, error, 256 ); + +env-l-jkLog(env, env-l, JK_LOG_ERROR, + shm.create(): error opening file %s %d %s\n, + shm-fname, rc, error ); +shm-privateData=NULL; +return rc; +} + +rc=apr_file_info_get(finfo, APR_FINFO_SIZE, file); + +if( shm-mbean-debug 0 ) +env-l-jkLog(env, env-l, JK_LOG_INFO, + shm.create(): file open %s %d %d\n, shm-fname, shm-size, finfo.size ); + +if( finfo.size shm-size ) { +char bytes[1024]; +int toWrite=shm-size-finfo.size; +apr_off_t off=0; + +memset( bytes, 0, 1024 ); +apr_file_seek( file, APR_END, off); -return apr_shm_detach(aprShm); +while( toWrite 0 ) { +apr_size_t written; +rc=apr_file_write_full(file, bytes, 1024, written); +if( rc!=APR_SUCCESS ) { +env-l-jkLog(env, env-l, JK_LOG_ERROR, + shm.create(): Can't write %s %d %s\n, + shm-fname, errno, strerror( errno )); +return JK_ERR; +} +toWrite-=written; +} + +
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
nacho 02/05/13 01:57:56 Modified:jk/native2/common jk_shm.c Log: * Fixed initialization of APR, this must be done in every place we use APR. Revision ChangesPath 1.14 +2 -0 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- jk_shm.c 12 May 2002 01:07:10 - 1.13 +++ jk_shm.c 13 May 2002 08:57:56 - 1.14 @@ -75,6 +75,7 @@ #include apr.h #include apr_strings.h +#include apr_general.h #include apr_portable.h #include apr_lib.h @@ -202,6 +203,7 @@ /* We don't want to have to recreate the scoreboard after * restarts, so we'll create a global pool and never clean it. */ +apr_initialize(); rv = apr_pool_create(globalShmPool, NULL); if (rv != APR_SUCCESS) { -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
costin 02/04/29 12:32:01 Modified:jk/native2/common jk_shm.c Log: One more step. Revision ChangesPath 1.7 +36 -7 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- jk_shm.c 25 Apr 2002 19:18:39 - 1.6 +++ jk_shm.c 29 Apr 2002 19:32:01 - 1.7 @@ -96,7 +96,7 @@ static apr_pool_t *globalShmPool; #define SHM_SET_ATTRIBUTE 0 -#define SHM_REGISTER_TOMCAT 2 +#define SHM_WRITE_SLOT 2 #define SHM_ATTACH 3 #define SHM_DETACH 4 @@ -257,10 +257,19 @@ { /* For now all slots are equal size */ -/* XXX interprocess sync */ -int slotId=shm-head-lastSlot++; +int slotId; +jk_shm_slot_t *slot; -jk_shm_slot_t *slot= (void *)shm-image + slotId * shm-slotSize; +for( i=1; ishm-head-lastSlot; i++ ) { +slot= shm-getSlot( env, shm, i ); +if( strncmp( slot-name, name ) == 0 ) { +return slot; +} +} +/* New slot */ +/* XXX interprocess sync */ +slotId=shm-head-lastSlot++; +slot=shm-getSlot( env, shm, slotId ); env-l-jkLog(env, env-l, JK_LOG_INFO, shm.createSlot() Create %d %p %p\n, slotId, shm-image, slot ); @@ -327,11 +336,31 @@ return JK_OK; } -case SHM_REGISTER_TOMCAT: { - +case SHM_WRITE_SLOT: { +char *instanceName=msg-getString( env, msg ); +jk_shm_slot *slot; + +env-l-jkLog(env, env-l, JK_LOG_INFO, + shm.registerTomcat() %s %d\n, + instanceName, msg-len ); +if( msg-len shm-slotSize ) { +env-l-jkLog(env, env-l, JK_LOG_ERROR, + shm.registerTomcat() Packet too large %d %d\n, + shm-slotSize, msg-len ); +return JK_ERR; +} +slot=shm-createSlot( env, shm, instanceName, 0 ); + +/* Copy the body in the slot */ +memcpy( slot-data, msg-buf, msg-len ); +slot-size=msg-len; +slot-ver++; +/* Update the head lb version number - that would triger + reconf on the next request */ +shm-head-lbVer++; return JK_OK; } -} +}/* switch */ return JK_ERR; } -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
costin 02/04/29 18:01:03 Modified:jk/native2/common jk_shm.c Log: Fix previous commit. Revision ChangesPath 1.8 +3 -2 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- jk_shm.c 29 Apr 2002 19:32:01 - 1.7 +++ jk_shm.c 30 Apr 2002 01:01:03 - 1.8 @@ -258,11 +258,12 @@ /* For now all slots are equal size */ int slotId; +int i; jk_shm_slot_t *slot; for( i=1; ishm-head-lastSlot; i++ ) { slot= shm-getSlot( env, shm, i ); -if( strncmp( slot-name, name ) == 0 ) { +if( strncmp( slot-name, name, strlen(name) ) == 0 ) { return slot; } } @@ -338,7 +339,7 @@ } case SHM_WRITE_SLOT: { char *instanceName=msg-getString( env, msg ); -jk_shm_slot *slot; +jk_shm_slot_t *slot; env-l-jkLog(env, env-l, JK_LOG_INFO, shm.registerTomcat() %s %d\n, -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
costin 02/04/25 12:18:40 Modified:jk/native2/common jk_shm.c Log: Many small fixes and changes to allow it to be used from C and java. Revision ChangesPath 1.6 +181 -131 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- jk_shm.c 18 Apr 2002 22:47:18 - 1.5 +++ jk_shm.c 25 Apr 2002 19:18:39 - 1.6 @@ -88,85 +88,69 @@ #if APR_HAS_SHARED_MEMORY #include apr_shm.h +#include apr_atomic.h /* Inter-process synchronization - to create the slots */ #include apr_proc_mutex.h -struct jk_shm_buffer { -/** Incremented after each modification */ -int generation; -/** 1 if the buffer is in an unstable state. - * XXX Shouldn't happen - */ -int busy; - -/** Pid of the owning process */ -int owner; - -int id; -char name[64]; - -char *data; -}; - -struct jk_shm_head { -int size; -int bufferCount; - -int objCount; -int lastId; - -struct jk_shm_buffer buffers[1]; -}; - - -typedef struct jk_shm_private { -apr_size_t size; -apr_shm_t *aprShm; +static apr_pool_t *globalShmPool; -struct jk_shm_head *image; -} jk_shm_private_t; +#define SHM_SET_ATTRIBUTE 0 +#define SHM_REGISTER_TOMCAT 2 +#define SHM_ATTACH 3 +#define SHM_DETACH 4 -static apr_pool_t *globalShmPool; static int jk2_shm_destroy(jk_env_t *env, jk_shm_t *shm) { -jk_shm_private_t *shmP=shm-privateData; - -return apr_shm_destroy(shmP-aprShm); +apr_shm_t *aprShm=(apr_shm_t *)shm-privateData; + +return apr_shm_destroy(aprShm); } static int jk2_shm_detach(jk_env_t *env, jk_shm_t *shm) { -jk_shm_private_t *shmP=shm-privateData; +apr_shm_t *aprShm=(apr_shm_t *)shm-privateData; -return apr_shm_detach(shmP-aprShm); +return apr_shm_detach(aprShm); } static int jk2_shm_attach(jk_env_t *env, jk_shm_t *shm) { -jk_shm_private_t *shmP=shm-privateData; - -return apr_shm_attach(shmP-aprShm, shm-fname, globalShmPool ); +return apr_shm_attach((apr_shm_t **)shm-privateData, shm-fname, globalShmPool ); } /* Create or reinit an existing scoreboard. The MPM can control whether * the scoreboard is shared across multiple processes or not */ -int jk2_shm_create(jk_env_t *env, jk_shm_t *shm) -{ -apr_status_t rv; -jk_shm_private_t *shmP=shm-privateData; +static int jk2_shm_init(struct jk_env *env, jk_shm_t *shm) { +apr_status_t rv=APR_SUCCESS; +jk_shm_head_t *head; + +if( shm-fname==NULL ) { +env-l-jkLog(env, env-l, JK_LOG_ERROR, shm.init(): No file\n); +return JK_ERR; +} -/* The config says to create a name-based shmem */ -if ( shm-fname == NULL ) { +if( shm-size == 0 ) { +shm-size = shm-slotSize * shm-slotMaxCount; +} + +/* We don't want to have to recreate the scoreboard after + * restarts, so we'll create a global pool and never clean it. + */ +rv = apr_pool_create(globalShmPool, NULL); + +if (rv != APR_SUCCESS) { env-l-jkLog(env, env-l, JK_LOG_ERROR, - No name for jk_shm\n); -return JK_ERR; + Unable to create global pool for jk_shm\n); +return rv; } -rv=apr_shm_attach(shmP-aprShm, shm-fname, globalShmPool ); +shm-privateData=NULL; + +rv=apr_shm_attach((apr_shm_t **)shm-privateData, shm-fname, globalShmPool ); if( rv ) { char error[256]; apr_strerror( rv, error, 256 ); @@ -174,8 +158,20 @@ env-l-jkLog(env, env-l, JK_LOG_ERROR, shm.create(): error attaching shm, will create %s %d %p %s\n, shm-fname, rv, globalShmPool, error ); -shmP-aprShm=NULL; +shm-privateData=NULL; } else { +env-l-jkLog(env, env-l, JK_LOG_INFO, + shm.create(): attaching to existing shm %s\n, + shm-fname ); +/* Get the base address, initialize it */ +shm-image = apr_shm_baseaddr_get( (apr_shm_t *)shm-privateData); +shm-head = (jk_shm_head_t *)shm-image; + +if( shm-image==NULL ) { +env-l-jkLog(env, env-l, JK_LOG_ERROR, + shm.create(): No base memory %s\n, shm-fname); +return JK_ERR; +} return JK_OK; } @@ -192,7 +188,7 @@ env-l-jkLog(env, env-l, JK_LOG_ERROR, shm.create(): error removing
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
costin 02/04/18 15:47:18 Modified:jk/native2/common jk_shm.c Log: Fix few silly errors. Now jk scoreboard is loaded ok from apache side. Revision ChangesPath 1.5 +39 -6 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- jk_shm.c 17 Apr 2002 22:52:14 - 1.4 +++ jk_shm.c 18 Apr 2002 22:47:18 - 1.5 @@ -154,7 +154,7 @@ /* Create or reinit an existing scoreboard. The MPM can control whether * the scoreboard is shared across multiple processes or not */ -static int jk2_shm_create(jk_env_t *env, jk_shm_t *shm) +int jk2_shm_create(jk_env_t *env, jk_shm_t *shm) { apr_status_t rv; jk_shm_private_t *shmP=shm-privateData; @@ -163,15 +163,42 @@ if ( shm-fname == NULL ) { env-l-jkLog(env, env-l, JK_LOG_ERROR, No name for jk_shm\n); -return JK_FALSE; +return JK_ERR; } +rv=apr_shm_attach(shmP-aprShm, shm-fname, globalShmPool ); +if( rv ) { +char error[256]; +apr_strerror( rv, error, 256 ); + +env-l-jkLog(env, env-l, JK_LOG_ERROR, + shm.create(): error attaching shm, will create %s %d %p %s\n, + shm-fname, rv, globalShmPool, error ); +shmP-aprShm=NULL; +} else { +return JK_OK; +} + /* make sure it's an absolute pathname */ /* fname = ap_server_root_relative(pconf, ap_scoreboard_fname); */ /* The shared memory file must not exist before we create the * segment. */ -apr_file_remove(shm-fname, globalShmPool ); /* ignore errors */ +rv = apr_file_remove(shm-fname, globalShmPool ); /* ignore errors */ +if (rv) { +char error[256]; +apr_strerror( rv, error, 256 ); + +env-l-jkLog(env, env-l, JK_LOG_ERROR, + shm.create(): error removing shm %s %d %s\n, + shm-fname, rv, error ); +shmP-aprShm=NULL; +return rv; +} else { +env-l-jkLog(env, env-l, JK_LOG_ERROR, + shm.create(): file removed ok\n); +} + rv = apr_shm_create(shmP-aprShm, shmP-size, shm-fname, globalShmPool); @@ -180,7 +207,8 @@ apr_strerror( rv, error, 256 ); env-l-jkLog(env, env-l, JK_LOG_ERROR, - shm.create(): error creating named scoreboard %s %d %s\n, + shm.create(): error creating shm %d %s %d %s\n, + shmP-size, shm-fname, rv, error ); shmP-aprShm=NULL; return rv; @@ -225,14 +253,14 @@ char error[256]; apr_strerror( rv, error, 256 ); env-l-jkLog(env, env-l, JK_LOG_ERROR, - Unable to attach to %s %d %s\n, shm-fname, rv, error); + Unable to attach %s %d %s\n, shm-fname, rv, error); } rv=jk2_shm_create( env, shm ); if( rv || shmP-aprShm==NULL ) { env-l-jkLog(env, env-l, JK_LOG_ERROR, - Unable to create to %s %d\n, shm-fname, rv); + Unable to create %s %d\n, shm-fname, rv); return JK_FALSE; } @@ -246,6 +274,11 @@ } memset(shmP-image, 0, shmP-size); +strcpy(shmP-image, Hello From Apache); + +env-l-jkLog(env, env-l, JK_LOG_INFO, + shm.init() Initalized %s %p\n, + shm-fname, shmP-image); return JK_TRUE; } -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
costin 02/04/17 15:52:14 Modified:jk/native2/common jk_shm.c Log: More work on the shm object. Revision ChangesPath 1.4 +85 -26jakarta-tomcat-connectors/jk/native2/common/jk_shm.c Index: jk_shm.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- jk_shm.c 12 Apr 2002 22:53:56 - 1.3 +++ jk_shm.c 17 Apr 2002 22:52:14 - 1.4 @@ -89,6 +89,9 @@ #include apr_shm.h +/* Inter-process synchronization - to create the slots */ +#include apr_proc_mutex.h + struct jk_shm_buffer { /** Incremented after each modification */ int generation; @@ -120,52 +123,42 @@ typedef struct jk_shm_private { apr_size_t size; apr_shm_t *aprShm; -apr_pool_t *aprPool; struct jk_shm_head *image; } jk_shm_private_t; static apr_pool_t *globalShmPool; -static int jk_shm_destroy(jk_env_t *env, jk_shm_t *shm) +static int jk2_shm_destroy(jk_env_t *env, jk_shm_t *shm) { jk_shm_private_t *shmP=shm-privateData; return apr_shm_destroy(shmP-aprShm); } -static int jk_shm_detach(jk_env_t *env, jk_shm_t *shm) +static int jk2_shm_detach(jk_env_t *env, jk_shm_t *shm) { jk_shm_private_t *shmP=shm-privateData; return apr_shm_detach(shmP-aprShm); } -static int jk_shm_attach(jk_env_t *env, jk_shm_t *shm) +static int jk2_shm_attach(jk_env_t *env, jk_shm_t *shm) { +jk_shm_private_t *shmP=shm-privateData; +return apr_shm_attach(shmP-aprShm, shm-fname, globalShmPool ); } /* Create or reinit an existing scoreboard. The MPM can control whether * the scoreboard is shared across multiple processes or not */ -static int jk_shm_createScoreboard(jk_env_t *env, jk_shm_t *shm) +static int jk2_shm_create(jk_env_t *env, jk_shm_t *shm) { apr_status_t rv; jk_shm_private_t *shmP=shm-privateData; -/* We don't want to have to recreate the scoreboard after - * restarts, so we'll create a global pool and never clean it. - */ -rv = apr_pool_create(globalShmPool, NULL); - -if (rv != APR_SUCCESS) { -env-l-jkLog(env, env-l, JK_LOG_ERROR, - Unable to create global pool for jk_shm\n); -return rv; -} - /* The config says to create a name-based shmem */ if ( shm-fname == NULL ) { env-l-jkLog(env, env-l, JK_LOG_ERROR, @@ -183,12 +176,67 @@ rv = apr_shm_create(shmP-aprShm, shmP-size, shm-fname, globalShmPool); if (rv) { +char error[256]; +apr_strerror( rv, error, 256 ); + env-l-jkLog(env, env-l, JK_LOG_ERROR, - shm.create(): error creating named scoreboard %s %d\n, - shm-fname, rv); + shm.create(): error creating named scoreboard %s %d %s\n, + shm-fname, rv, error ); +shmP-aprShm=NULL; return rv; } +return JK_OK; +} + +#define DEFAULT_SHM_SIZE 1024 * 1024 * 8 + +static int jk2_shm_init(struct jk_env *env, jk_shm_t *shm) { +apr_status_t rv; +jk_shm_private_t *shmP=shm-privateData; + +if( shm-fname==NULL ) { +env-l-jkLog(env, env-l, JK_LOG_ERROR, + shm.init(): No file\n); +return JK_FALSE; +} + +if( shmP-size == 0 ) { +shmP-size = DEFAULT_SHM_SIZE; +} + +/* We don't want to have to recreate the scoreboard after + * restarts, so we'll create a global pool and never clean it. + */ +rv = apr_pool_create(globalShmPool, NULL); + +if (rv != APR_SUCCESS) { +env-l-jkLog(env, env-l, JK_LOG_ERROR, + Unable to create global pool for jk_shm\n); +return rv; +} + +shmP-aprShm=NULL; + +/* Try to attach */ +rv=jk2_shm_attach( env, shm ); + +if( rv || shmP-aprShm==NULL ) { +char error[256]; +apr_strerror( rv, error, 256 ); +env-l-jkLog(env, env-l, JK_LOG_ERROR, + Unable to attach to %s %d %s\n, shm-fname, rv, error); +} + +rv=jk2_shm_create( env, shm ); + +if( rv || shmP-aprShm==NULL ) { +env-l-jkLog(env, env-l, JK_LOG_ERROR, + Unable to create to %s %d\n, shm-fname, rv); +return JK_FALSE; +} + +/* Get the base address, initialize it */ shmP-image = apr_shm_baseaddr_get( shmP-aprShm); if( shmP-image==NULL ) { env-l-jkLog(env, env-l, JK_LOG_ERROR, @@ -202,30 +250,41 @@ return JK_TRUE; } -static int jk2_shm_init(struct jk_env *env, jk_shm_t *shm) { -
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
costin 02/04/10 16:44:56 Modified:jk/native2/common jk_shm.c Added: jk/native2/include jk_shm.h Log: A bit more code in the shm area. Revision ChangesPath 1.1 jakarta-tomcat-connectors/jk/native2/include/jk_shm.h Index: jk_shm.h === /* = * * * * The Apache Software License, Version 1.1 * * * * Copyright (c) 1999-2001 The Apache Software Foundation. * * All rights reserved.* * * * = * * * * Redistribution and use in source and binary forms, with or without modi- * * fication, are permitted provided that the following conditions are met: * * * * 1. Redistributions of source code must retain the above copyright notice * *notice, this list of conditions and the following disclaimer. * * * * 2. Redistributions in binary form must reproduce the above copyright * *notice, this list of conditions and the following disclaimer in the * *documentation and/or other materials provided with the distribution. * * * * 3. The end-user documentation included with the redistribution, if any, * *must include the following acknowlegement: * * * * This product includes software developed by the Apache Software * *Foundation http://www.apache.org/. * * * *Alternately, this acknowlegement may appear in the software itself, if * *and wherever such third-party acknowlegements normally appear. * * * * 4. The names The Jakarta Project, Jk, and Apache Software * *Foundation must not be used to endorse or promote products derived * *from this software without prior written permission. For written * *permission, please contact [EMAIL PROTECTED].* * * * 5. Products derived from this software may not be called Apache nor may * *Apache appear in their names without prior written permission of the * *Apache Software Foundation.* * * * THIS SOFTWARE IS PROVIDED AS IS AND ANY EXPRESSED OR IMPLIED WARRANTIES * * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL * * THE APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY * * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * * POSSIBILITY OF SUCH DAMAGE. * * * * = * * * * This software consists of voluntary contributions made by many indivi- * * duals on behalf of the Apache Software Foundation. For more information * * on the Apache Software Foundation, please see http://www.apache.org/. * * * * = */ #ifndef JK_SHM_H #define JK_SHM_H #include jk_global.h #include jk_env.h #include jk_logger.h #include