mturk 2002/06/26 04:06:58 Modified: jk/native2/common jk_channel_jni.c Log: Fix the multithreading bug in channel open, setting worker to the disabled state, that caused already opened enpoint to fail. Revision Changes Path 1.28 +27 -18 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.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- jk_channel_jni.c 10 Jun 2002 23:57:24 -0000 1.27 +++ jk_channel_jni.c 26 Jun 2002 11:06:58 -0000 1.28 @@ -146,20 +146,28 @@ env->l->jkLog(env, env->l, JK_LOG_INFO,"channel_jni.open(): \n" ); - if( _this->worker != NULL ) - _this->worker->mbean->disabled=JK_TRUE; - + /* It is useless to continue if the channel worker + does not exist. + */ + if( _this->worker == NULL ) { + env->l->jkLog(env, env->l, JK_LOG_ERROR, + "channel_jni.open() NullPointerException, no channel worker found\n"); + return JK_ERR; + } + jniCh->vm=(jk_vm_t *)we->vm; if( jniCh->vm == NULL ) { - env->l->jkLog(env, env->l, JK_LOG_INFO, + env->l->jkLog(env, env->l, JK_LOG_ERROR, "channel_jni.open() no VM found\n" ); + _this->worker->mbean->disabled=JK_TRUE; return JK_ERR; } jniEnv = (JNIEnv *)jniCh->vm->attach( env, jniCh->vm ); if( jniEnv == NULL ) { - env->l->jkLog(env, env->l, JK_LOG_INFO, + env->l->jkLog(env, env->l, JK_LOG_ERROR, "channel_jni.open() can't attach\n" ); + _this->worker->mbean->disabled=JK_TRUE; return JK_ERR; } /* Create the buffers used by the write method. We allocate a @@ -174,24 +182,22 @@ sizeof( jk_ch_jni_ep_private_t )); endpoint->channelData=epData; - /** XXX make it customizable */ - jniCh->className=JAVA_BRIDGE_CLASS_NAME; - - jniCh->jniBridge = - (*jniEnv)->FindClass(jniEnv, jniCh->className ); + jniCh->jniBridge = (*jniEnv)->FindClass(jniEnv, jniCh->className ); if( jniCh->jniBridge == NULL ) { - env->l->jkLog(env, env->l, JK_LOG_INFO, + env->l->jkLog(env, env->l, JK_LOG_ERROR, "channel_jni.open() can't find %s\n",jniCh->className ); + _this->worker->mbean->disabled=JK_TRUE; return JK_ERR; } jniCh->jniBridge=(*jniEnv)->NewGlobalRef( jniEnv, jniCh->jniBridge); if( jniCh->jniBridge == NULL ) { - env->l->jkLog(env, env->l, JK_LOG_INFO, + env->l->jkLog(env, env->l, JK_LOG_ERROR, "channel_jni.open() Unable to allocate globalref for %s\n",jniCh->className ); + _this->worker->mbean->disabled=JK_TRUE; return JK_ERR; } @@ -206,8 +212,9 @@ jmethod=(*jniEnv)->GetStaticMethodID(jniEnv, jniCh->jniBridge, "createJavaContext", "(Ljava/lang/String;J)Ljava/lang/Object;"); if( jmethod == NULL ) { - env->l->jkLog(env, env->l, JK_LOG_INFO, + env->l->jkLog(env, env->l, JK_LOG_ERROR, "channel_jni.open() can't find createJavaContext\n"); + _this->worker->mbean->disabled=JK_TRUE; return JK_ERR; } @@ -222,6 +229,7 @@ env->l->jkLog(env, env->l, JK_LOG_ERROR, "channel_jni.open() Can't create java context\n" ); epData->jniJavaContext=NULL; + _this->worker->mbean->disabled=JK_TRUE; return JK_ERR; } epData->jniJavaContext=(*jniEnv)->NewGlobalRef( jniEnv, jobj ); @@ -235,8 +243,9 @@ "getBuffer", "(Ljava/lang/Object;I)[B"); if( jmethod == NULL ) { - env->l->jkLog(env, env->l, JK_LOG_INFO, + env->l->jkLog(env, env->l, JK_LOG_ERROR, "channel_jni.open() can't find getBuffer\n"); + _this->worker->mbean->disabled=JK_TRUE; return JK_ERR; } @@ -259,17 +268,17 @@ "(JLjava/lang/Object;)I"); if( jniCh->writeMethod == NULL ) { - env->l->jkLog(env, env->l, JK_LOG_EMERG, + env->l->jkLog(env, env->l, JK_LOG_EMERG, "channel_jni.open() can't find jniInvoke\n"); + + _this->worker->mbean->disabled=JK_TRUE; return JK_ERR; } env->l->jkLog(env, env->l, JK_LOG_INFO, "channel_jni.open() found write method, open ok\n" ); - - if( _this->worker != NULL ) - _this->worker->mbean->disabled=JK_FALSE; + _this->worker->mbean->disabled=JK_FALSE; /* Don't detach ( XXX Need to find out when the thread is * closing in order for this to work )
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>