nacho       02/05/19 14:41:25

  Modified:    jk/native2/common jk_channel_jni.c
  Log:
  * Better close, try to release memory and Java Objects..
  
  Revision  Changes    Path
  1.21      +34 -9     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.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- jk_channel_jni.c  16 May 2002 23:48:27 -0000      1.20
  +++ jk_channel_jni.c  19 May 2002 21:41:25 -0000      1.21
  @@ -192,7 +192,6 @@
       jniCh->jniBridge =
           (*jniEnv)->FindClass(jniEnv, jniCh->className );
   
  -    jniCh->jniBridge=(*jniEnv)->NewGlobalRef( jniEnv, jniCh->jniBridge);
       
       if( jniCh->jniBridge == NULL ) {
           env->l->jkLog(env, env->l, JK_LOG_INFO,
  @@ -200,6 +199,13 @@
           return JK_ERR;
       }
   
  +    jniCh->jniBridge=(*jniEnv)->NewGlobalRef( jniEnv, jniCh->jniBridge);
  +
  +    if( jniCh->jniBridge == NULL ) {
  +        env->l->jkLog(env, env->l, JK_LOG_INFO,
  +                      "channel_jni.open() Unable to allocate globalref for 
%s\n",jniCh->className ); 
  +        return JK_ERR;
  +    }
   
       /* Interface to the callback mechansim. The idea is simple ( is it ? ) - we
          use a similar pattern with java, trying to do as little as possible
  @@ -291,12 +297,27 @@
                                              jk_endpoint_t *endpoint)
   {
       jk_ch_jni_ep_private_t *epData;
  -
  +    JNIEnv *jniEnv;
  +    jk_channel_jni_private_t *jniCh=_this->_privatePtr;
       epData=(jk_ch_jni_ep_private_t *)endpoint->channelData;
  -    
  -    /* (*jniEnv)->DeleteGlobalRef( jniEnv, epData->msgJ ); */
  -    /*     (*jniEnv)->DeleteGlobalRef( jniEnv, epData->jniJavaContext ); */
  -    
  +    jniEnv = (JNIEnv *)jniCh->vm->attach( env, jniCh->vm );
  +
  +    if( jniEnv == NULL ) {
  +        env->l->jkLog(env, env->l, JK_LOG_INFO,
  +                      "channel_jni.close() can't attach\n" ); 
  +        return JK_ERR;
  +    }
  +    if( epData->jarray != NULL ){
  +        (*jniEnv)->DeleteGlobalRef( jniEnv, epData->jarray );
  +    }
  +    if( epData->jniJavaContext != NULL){
  +        (*jniEnv)->DeleteGlobalRef( jniEnv, epData->jniJavaContext );
  +    }
  +    endpoint->mbean->pool->realloc(env,endpoint->mbean->pool,0,
  +        epData->carray,epData->arrayLen);
  +    endpoint->mbean->pool->realloc(env,endpoint->mbean->pool,0,
  +        epData,sizeof( jk_ch_jni_ep_private_t ));
  +    endpoint->channelData=NULL;
       return JK_OK;
   
   }
  @@ -327,7 +348,7 @@
       JNIEnv *jniEnv;
       jk_channel_jni_private_t *jniCh=_this->_privatePtr;
       jk_ch_jni_ep_private_t *epData=
  -        (jk_ch_jni_ep_private_t *)endpoint->channelData;;
  +        (jk_ch_jni_ep_private_t *)endpoint->channelData;
   
       if( _this->mbean->debug > 0 )
           env->l->jkLog(env, env->l, JK_LOG_INFO,"channel_jni.send() %p\n", epData ); 
  @@ -336,9 +357,13 @@
           jk2_channel_jni_open( env, _this, endpoint );
           epData=(jk_ch_jni_ep_private_t *)endpoint->channelData;
       }
  -    if( epData == NULL || epData->jniJavaContext == NULL ) {
  +    if( epData == NULL ){
  +        env->l->jkLog(env, env->l, JK_LOG_ERROR,"channel_jni.send() error opening 
channel\n" ); 
  +        return JK_ERR;
  +    }
  +    if( epData->jniJavaContext == NULL ) {
           env->l->jkLog(env, env->l, JK_LOG_ERROR,"channel_jni.send() no java 
context\n" ); 
  -        
  +        jk2_channel_jni_close( env, _this, endpoint );
           return JK_ERR;
       }
   
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to