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]>

Reply via email to