costin 02/05/01 20:13:05 Modified: jk/native2/common jk_channel_jni.c jk_msg_ajp.c jk_shm.c jk_worker_status.c jk/native2/include jk_msg.h Log: Added some more debugging code the shm ( now it can dump the content in a file and display some more or less usefull information ). Started to add code to serialize/deserialize a map ( it's very common ). Few more checks, remove few verbose messages. Revision Changes Path 1.13 +4 -1 jakarta-tomcat-connectors/jk/native2/common/jk_channel_jni.c Index: jk_channel_jni.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_channel_jni.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- jk_channel_jni.c 1 May 2002 23:10:17 -0000 1.12 +++ jk_channel_jni.c 2 May 2002 03:13:05 -0000 1.13 @@ -466,7 +466,10 @@ /* XXX Don't detach if worker is reused per thread */ endpoint->endpoint_private=NULL; - we->vm->detach( env, we->vm ); + if( we==NULL || we->vm==NULL ) { + return JK_OK; + } + /* we->vm->detach( env, we->vm ); */ env->l->jkLog(env, env->l, JK_LOG_INFO, "channelJni.afterRequest() ok\n"); 1.8 +67 -21 jakarta-tomcat-connectors/jk/native2/common/jk_msg_ajp.c Index: jk_msg_ajp.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_msg_ajp.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- jk_msg_ajp.c 25 Apr 2002 19:17:22 -0000 1.7 +++ jk_msg_ajp.c 2 May 2002 03:13:05 -0000 1.8 @@ -60,7 +60,7 @@ * Author: Costin Manolache * Author: Gal Shachor <[EMAIL PROTECTED]> * * Author: Henri Gomez <[EMAIL PROTECTED]> * - * Version: $Revision: 1.7 $ * + * Version: $Revision: 1.8 $ * ***************************************************************************/ #include "jk_pool.h" @@ -83,7 +83,7 @@ int i=0; env->l->jkLog( env, env->l, JK_LOG_INFO, "%s pos=%d len=%d max=%d \n", - err, _this->pos, _this->len, _this->maxlen ); + err, _this->pos, _this->len, _this->maxlen ); env->l->jkLog( env, env->l, JK_LOG_INFO, "%2x %2x %2x %2x:%2x %2x %2x %2x:%2x %2x %2x %2x:%2x %2x %2x %2x \n", @@ -169,6 +169,21 @@ return JK_OK; } +static int jk2_msg_ajp_appendMap(jk_env_t *env, jk_msg_t *msg, + jk_map_t *map) +{ + + return JK_OK; +} + +static int jk2_msg_ajp_getMap(jk_env_t *env, jk_msg_t *msg, + jk_map_t *map) +{ + + return JK_OK; +} + + static int jk2_msg_ajp_appendString(jk_env_t *env, jk_msg_t *msg, const char *param) { @@ -413,25 +428,8 @@ return len; } - -jk_msg_t *jk2_msg_ajp_create(jk_env_t *env, jk_pool_t *pool, int buffSize) +static void jk2_msg_ajp_init(jk_env_t *env, jk_msg_t *msg, int buffSize) { - jk_msg_t *msg = - (jk_msg_t *)pool->calloc(env, pool, sizeof(jk_msg_t)); - - if( buffSize==0 ) - buffSize=DEF_BUFFER_SZ; - if(!msg) { - return NULL; - } - msg->pool = pool; - - msg->buf= (unsigned char *)msg->pool->alloc(env, msg->pool, buffSize); - - if(msg->buf==NULL) { - return NULL; - } - msg->maxlen=buffSize; msg->len=0; @@ -446,6 +444,7 @@ msg->appendInt=jk2_msg_ajp_appendInt; msg->appendLong=jk2_msg_ajp_appendLong; msg->appendString=jk2_msg_ajp_appendString; + msg->appendMap=jk2_msg_ajp_appendMap; msg->appendFromServer=jk2_msg_ajp_appendFromServer; @@ -454,10 +453,57 @@ msg->peekInt=jk2_msg_ajp_peekInt; msg->getLong=jk2_msg_ajp_getLong; msg->getString=jk2_msg_ajp_getString; + msg->getMap=jk2_msg_ajp_getMap; msg->getBytes=jk2_msg_ajp_getBytes; msg->checkHeader=jk2_msg_ajp_checkHeader; - +} + + +jk_msg_t *jk2_msg_ajp_create2(jk_env_t *env, jk_pool_t *pool, char *buf, int buffSize) +{ + jk_msg_t *msg = + (jk_msg_t *)pool->calloc(env, pool, sizeof(jk_msg_t)); + + if( buffSize==0 ) + buffSize=DEF_BUFFER_SZ; + if(!msg) { + return NULL; + } + msg->pool = pool; + + msg->buf= buf; + + if(msg->buf==NULL) { + return NULL; + } + + jk2_msg_ajp_init( env, msg, buffSize ); + + return msg; +} + + +jk_msg_t *jk2_msg_ajp_create(jk_env_t *env, jk_pool_t *pool, int buffSize) +{ + jk_msg_t *msg = + (jk_msg_t *)pool->calloc(env, pool, sizeof(jk_msg_t)); + + if( buffSize==0 ) + buffSize=DEF_BUFFER_SZ; + if(!msg) { + return NULL; + } + msg->pool = pool; + + msg->buf= (unsigned char *)msg->pool->alloc(env, msg->pool, buffSize); + + if(msg->buf==NULL) { + return NULL; + } + + jk2_msg_ajp_init( env, msg, buffSize ); + return msg; } 1.10 +112 -35 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.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- jk_shm.c 1 May 2002 23:10:17 -0000 1.9 +++ jk_shm.c 2 May 2002 03:13:05 -0000 1.10 @@ -99,6 +99,9 @@ #define SHM_WRITE_SLOT 2 #define SHM_ATTACH 3 #define SHM_DETACH 4 +#define SHM_RESET 5 +#define SHM_DUMP 6 +#define SHM_DESTROY 7 static int jk2_shm_destroy(jk_env_t *env, jk_shm_t *shm) @@ -120,6 +123,65 @@ return apr_shm_attach((apr_shm_t **)&shm->privateData, shm->fname, globalShmPool ); } +/** Reset the scoreboard, in case it gets corrupted. + * Will remove all slots and set the head in the original state. + */ +static int jk2_shm_reset(jk_env_t *env, jk_shm_t *shm) +{ + if( shm->head == NULL ) { + return JK_ERR; + } + memset(shm->image, 0, shm->size); + + shm->head->slotSize = shm->slotSize; + shm->head->slotMaxCount = shm->slotMaxCount; + shm->head->lastSlot = 1; + + env->l->jkLog(env, env->l, JK_LOG_INFO, + "shm.init() Initalized %s %p\n", + shm->fname, shm->image); + + return JK_OK; +} + +static int jk2_shm_dump(jk_env_t *env, jk_shm_t *shm, char *name) +{ + FILE *f; + int i; + + env->l->jkLog(env, env->l, JK_LOG_INFO, "shm.dump(): Struct Size=%d slotSize=%d slotCnt=%d head=%p\n", + shm->size, shm->slotSize, shm->slotMaxCount, shm->head ); + + if( shm->head==NULL ) return JK_ERR; + + env->l->jkLog(env, env->l, JK_LOG_INFO, "shm.dump(): shmem slotSize=%d slotCnt=%d lastSlot=%d ver=%d\n", + shm->head->slotSize, shm->head->slotMaxCount, shm->head->lastSlot, shm->head->lbVer ); + + for( i=1; i< shm->head->lastSlot; i++ ) { + jk_shm_slot_t *slot=shm->getSlot( env, shm, i ); + jk_msg_t *msg; + + if( slot==NULL ) continue; + msg=jk2_msg_ajp_create2( env, env->tmpPool, slot->data, slot->size); + + env->l->jkLog(env, env->l, JK_LOG_INFO, "shm.dump(): slot %d ver=%d size=%d name=%s\n", + i, slot->ver, slot->size, slot->name ); + + msg->dump( env, msg, "Slot content "); + } + + if( name==NULL ) return JK_ERR; + + f=fopen(name, "a+"); + fwrite( shm->head, 1, shm->size, f ); + fclose( f ); + + env->l->jkLog(env, env->l, JK_LOG_INFO, "shm.dump(): Dumped %d in %s\n", + shm->size, name); + + return JK_OK; +} + /* Create or reinit an existing scoreboard. The MPM can control whether * the scoreboard is shared across multiple processes or not @@ -230,16 +292,8 @@ shm->fname); return JK_ERR; } - - memset(shm->image, 0, shm->size); - shm->head->slotSize = shm->slotSize; - shm->head->slotMaxCount = shm->slotMaxCount; - shm->head->lastSlot = 1; - - env->l->jkLog(env, env->l, JK_LOG_INFO, - "shm.init() Initalized %s %p\n", - shm->fname, shm->image); + jk2_shm_reset( env, shm ); return JK_OK; } @@ -307,8 +361,41 @@ } -/* ==================== Dispatch messages from java ==================== */ +/** Copy a chunk of data into a named slot + */ +static int jk2_shm_writeSlot( jk_env_t *env, jk_shm_t *shm, + char *instanceName, char *buf, int len ) +{ + jk_shm_slot_t *slot; + + env->l->jkLog(env, env->l, JK_LOG_INFO, + "shm.writeSlot() %s %d\n", instanceName, len ); + if( len > shm->slotSize ) { + env->l->jkLog(env, env->l, JK_LOG_ERROR, + "shm.writeSlot() Packet too large %d %d\n", + shm->slotSize, len ); + return JK_ERR; + } + if( shm->head == NULL ) { + env->l->jkLog(env, env->l, JK_LOG_ERROR, + "shm.writeSlot() No head - shm was not initalized\n"); + return JK_ERR; + } + slot=shm->createSlot( env, shm, instanceName, 0 ); + + /* Copy the body in the slot */ + memcpy( slot->data, buf, len ); + slot->size=len; + slot->ver++; + /* Update the head lb version number - that would triger + reconf on the next request */ + shm->head->lbVer++; + + return JK_OK; +} +/* ==================== Dispatch messages from java ==================== */ + /** Called by java. Will call the right shm method. */ static int jk2_shm_dispatch(jk_env_t *env, void *target, jk_endpoint_t *ep, jk_msg_t *msg) @@ -343,31 +430,20 @@ } case SHM_WRITE_SLOT: { char *instanceName=msg->getString( env, msg ); - jk_shm_slot_t *slot; - - env->l->jkLog(env, env->l, JK_LOG_INFO, - "shm.writeSlot() %s %d\n", - instanceName, msg->len ); - if( msg->len > shm->slotSize ) { - env->l->jkLog(env, env->l, JK_LOG_ERROR, - "shm.writeSlot() Packet too large %d %d\n", - shm->slotSize, msg->len ); - return JK_ERR; - } - if( shm->head == NULL ) { - env->l->jkLog(env, env->l, JK_LOG_ERROR, - "shm.writeSlot() No head - shm was not initalized\n"); - 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++; + char *buf=msg->buf; + int len=msg->len; + + return jk2_shm_writeSlot( env, shm, instanceName, buf, len ); + } + case SHM_RESET: { + jk2_shm_reset( env, shm ); + + return JK_OK; + } + case SHM_DUMP: { + char *name=msg->getString( env, msg ); + + jk2_shm_dump( env, shm, name ); return JK_OK; } }/* switch */ @@ -393,6 +469,7 @@ if( shm == NULL ) return JK_ERR; + shm->pool=pool; shm->privateData=NULL; shm->slotSize=DEFAULT_SLOT_SIZE; 1.15 +0 -2 jakarta-tomcat-connectors/jk/native2/common/jk_worker_status.c Index: jk_worker_status.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_worker_status.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- jk_worker_status.c 25 Apr 2002 19:22:19 -0000 1.14 +++ jk_worker_status.c 2 May 2002 03:13:05 -0000 1.15 @@ -191,7 +191,6 @@ s->msg="OK"; s->headers_out->put(env, s->headers_out, "Content-Type", "text/html", NULL); - fprintf(stderr, "Writing head \n"); s->head(env, s ); /** Process the query string. @@ -206,7 +205,6 @@ jk2_worker_status_displayRuntimeProperties(env, s, s->workerEnv ); s->afterRequest( env, s); - fprintf(stderr, "After req %s \n", s); return JK_OK; } 1.6 +12 -0 jakarta-tomcat-connectors/jk/native2/include/jk_msg.h Index: jk_msg.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/include/jk_msg.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- jk_msg.h 21 Feb 2002 11:15:51 -0000 1.5 +++ jk_msg.h 2 May 2002 03:13:05 -0000 1.6 @@ -145,6 +145,9 @@ int (*appendString)(struct jk_env *env, struct jk_msg *_this, const char *param); + int (*appendMap)(struct jk_env *env, struct jk_msg *_this, + struct jk_map map); + unsigned char (*getByte)(struct jk_env *env, struct jk_msg *_this); unsigned short (*getInt)(struct jk_env *env, struct jk_msg *_this); @@ -169,6 +172,12 @@ struct jk_msg *_this, int *len); + /** Read a map structure from the message. The map is encoded + as an int count and then the NV pairs + */ + int (*getMap)(struct jk_env *env, struct jk_msg *_this, + struct jk_map map); + /** * Special method. Will read data from the server and add them as * bytes. It is equivalent with jk2_requtil_readFully() in a buffer @@ -198,6 +207,9 @@ /* Temp */ jk_msg_t *jk2_msg_ajp_create(struct jk_env *env, struct jk_pool *p, int buffSize); + +jk_msg_t *jk2_msg_ajp_create2(struct jk_env *env, struct jk_pool *pool, + char *buf, int buffSize); #ifdef __cplusplus }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>