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