costin 02/05/16 13:54:18 Modified: jk/native2/server/apache2 mod_jk2.c jk_service_apache2.c Log: We can't call find_by_pid in init() because the scoreboard may not be initialized or the process may not be registered. We can't call it in service() because linux will return the pid of the thread, which has nothing to do with the child id ( so it won't be found in the scoreboard ). We need the right pid to find the childId - it used to be available in connection_rec. We need the childId because there's no easy way to allocate a slot in the jk scoreboard ( or detect a slot is no longer used ). The current workaround is to get the pid in init(), which is called ( hopefully ) in the child main thread ( which is registered in the scoreboard ). And we find the child_num in service, when the scoreboard is supposed to be ok. ( we do the same for apache1.3 - since child_num is only available on the first connection ) Revision Changes Path 1.23 +4 -9 jakarta-tomcat-connectors/jk/native2/server/apache2/mod_jk2.c Index: mod_jk2.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/server/apache2/mod_jk2.c,v retrieving revision 1.22 retrieving revision 1.23 diff -u -r1.22 -r1.23 --- mod_jk2.c 15 May 2002 19:46:46 -0000 1.22 +++ mod_jk2.c 16 May 2002 20:54:18 -0000 1.23 @@ -59,7 +59,7 @@ * Description: Apache 2 plugin for Jakarta/Tomcat * * Author: Gal Shachor <[EMAIL PROTECTED]> * * Henri Gomez <[EMAIL PROTECTED]> * - * Version: $Revision: 1.22 $ * + * Version: $Revision: 1.23 $ * ***************************************************************************/ /* @@ -78,6 +78,7 @@ #include "http_protocol.h" #include "http_main.h" #include "http_log.h" +#include "scoreboard.h" #include "util_script.h" @@ -324,7 +325,7 @@ fprintf( stderr, "Create config for virtual host\n"); } else { /* Default host */ - fprintf( stderr, "Create config for main host\n"); + /* fprintf( stderr, "Create config for main host\n"); */ } jkb = workerEnv->globalEnv->createBean2( workerEnv->globalEnv, @@ -369,11 +370,6 @@ static char * jk2_init(jk_env_t *env, apr_pool_t *pconf, jk_workerEnv_t *workerEnv, server_rec *s ) { - apr_proc_t proc; - - proc.pid=getpid(); - workerEnv->childId=find_child_by_pid( & proc ); - workerEnv->init(env, workerEnv ); workerEnv->server_name = (char *)ap_get_server_version(); ap_add_version_component(pconf, JK_EXPOSED_VERSION); @@ -450,6 +446,7 @@ workerEnv->parentInit( env, workerEnv); + /* if(!workerEnv->was_initialized) { */ /* workerEnv->was_initialized = JK_OK; */ @@ -492,13 +489,11 @@ */ static int jk2_handler(request_rec *r) { - const char *worker_name; jk_logger_t *l=NULL; int rc; jk_worker_t *worker=NULL; jk_endpoint_t *end = NULL; jk_uriEnv_t *uriEnv; - jk_uriEnv_t *dirEnv; jk_env_t *env; jk_workerEnv_t *workerEnv; 1.21 +30 -1 jakarta-tomcat-connectors/jk/native2/server/apache2/jk_service_apache2.c Index: jk_service_apache2.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/server/apache2/jk_service_apache2.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- jk_service_apache2.c 15 May 2002 19:46:46 -0000 1.20 +++ jk_service_apache2.c 16 May 2002 20:54:18 -0000 1.21 @@ -59,7 +59,7 @@ * Description: Apache 2 plugin for Jakarta/Tomcat * Author: Gal Shachor <[EMAIL PROTECTED]> * Henri Gomez <[EMAIL PROTECTED]> - * Version: $Revision: 1.20 $ + * Version: $Revision: 1.21 $ */ #include "apu_compat.h" @@ -354,7 +354,36 @@ /* Common initialization */ /* XXX Probably not needed, we're duplicating */ jk2_requtil_initRequest(env, s); + + /* Ugly hack to get the childId - the index used in the scoreboard, + which we'll use in the jk scoreboard + */ + if( workerEnv->childId == -1 ) + { + apr_proc_t proc; + proc.pid=workerEnv->childProcessId; + + /* detect if scoreboard exists, the method will SIGFLT + since it doesn't check internally + */ + if( r->connection->sbh==NULL ) { + env->l->jkLog(env, env->l, JK_LOG_INFO, + "service.init() No scoreboard %d\n", proc.pid); + workerEnv->childId=-2; + } + workerEnv->childId=find_child_by_pid( & proc ); + /* Avoid looking again */ + if( workerEnv->childId == -1 ) { + env->l->jkLog(env, env->l, JK_LOG_INFO, + "service.init() Can't find child in scoreboard %d\n", proc.pid); + workerEnv->childId=-2; + } else { + env->l->jkLog(env, env->l, JK_LOG_INFO, + "service.init() Found child in scoreboard %d %d\n", proc.pid, workerEnv->childId); + } + } + s->ws_private = r; s->response_started = JK_FALSE; s->read_body_started = JK_FALSE;
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>