costin 2002/06/10 14:30:48 Modified: jk/native2/jni jk_jni_aprImpl.c Log: Last part of the patch from Mladen Turk, with few changes. The apr_initialize() is called if no jk_globalEnv is found, which means jk wasn't initialized so probably we are in Java standalone mode, and java just loaded libjkjni.so and libapr.so. Revision Changes Path 1.32 +100 -8 jakarta-tomcat-connectors/jk/native2/jni/jk_jni_aprImpl.c Index: jk_jni_aprImpl.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/jni/jk_jni_aprImpl.c,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- jk_jni_aprImpl.c 7 Jun 2002 23:42:19 -0000 1.31 +++ jk_jni_aprImpl.c 10 Jun 2002 21:30:48 -0000 1.32 @@ -96,8 +96,16 @@ #include "signal.h" #endif -static apr_pool_t *jniAprPool; +/* jniAprPool is the 'master pool' for standalone use ( i.e. not inprocess ) + All resources are allocated in this pool +*/ +static apr_pool_t *jniAprPool=NULL; + +/** Access to the jk workerEnv. This field and jk_env_globalEnv are used + to interact with the jk components + */ static jk_workerEnv_t *workerEnv; + static int jniDebug=0; #define JK_GET_REGION 1 @@ -113,25 +121,28 @@ } /* -------------------- Apr initialization and pools -------------------- */ - + JNIEXPORT jint JNICALL Java_org_apache_jk_apr_AprImpl_initialize(JNIEnv *jniEnv, jobject _jthis) { jk_env_t *env; - - apr_initialize(); - apr_pool_create( &jniAprPool, NULL ); + /* For in-process the env is initialized already */ if( jk_env_globalEnv == NULL ) { jk_pool_t *globalPool; + apr_initialize(); + apr_pool_create( &jniAprPool, NULL ); + if( jniAprPool==NULL ) { - return 0; + return JK_ERR; } jk2_pool_apr_create( NULL, &globalPool, NULL, jniAprPool ); /* Create the global env */ env=jk2_env_getEnv( NULL, globalPool ); + env->setAprPool(env, gPool); } + env=jk_env_globalEnv; workerEnv=env->getByName( env, "workerEnv" ); @@ -160,14 +171,18 @@ workerEnv->init( env, workerEnv ); } - /* fprintf( stderr, "XXX aprImpl: %p %p\n", env, workerEnv); */ - return 0; + + return JK_OK; } JNIEXPORT jint JNICALL Java_org_apache_jk_apr_AprImpl_terminate(JNIEnv *jniEnv, jobject _jthis) { + if ( jniAprPool!=NULL ) { + apr_pool_destroy(jniAprPool); + jniAprPool = NULL; /* apr_terminate(); */ + } return 0; } @@ -621,6 +636,83 @@ /* env->l->jkLog(env, env->l, JK_LOG_INFO, "jkInvoke() done\n"); */ return rc; +} + + +static JNINativeMethod org_apache_jk_apr_AprImpl_native_methods[] = { + { + "initialize", "()I", + Java_org_apache_jk_apr_AprImpl_initialize + }, + { + "terminate", "()I", + Java_org_apache_jk_apr_AprImpl_terminate + }, + { + "getJkEnv", "()J", + Java_org_apache_jk_apr_AprImpl_getJkEnv + }, + { + "releaseJkEnv", "(J)V", + Java_org_apache_jk_apr_AprImpl_releaseJkEnv + }, + { + "getJkHandler", "(JLjava/lang/String;)J", + Java_org_apache_jk_apr_AprImpl_getJkHandler + }, + { + "createJkHandler", "(JLjava/lang/String;)J", + Java_org_apache_jk_apr_AprImpl_createJkHandler + }, + { + "jkSetAttribute", "(JJLjava/lang/String;Ljava/lang/String;)I", + Java_org_apache_jk_apr_AprImpl_jkSetAttribute + }, + { + "jkGetAttribute", "(JJLjava/lang/String;)Ljava/lang/String;", + Java_org_apache_jk_apr_AprImpl_jkGetAttribute + }, + { + "jkInit", "(JJ)I", + Java_org_apache_jk_apr_AprImpl_jkInit + }, + { + "jkDestroy", "(JJ)I", + Java_org_apache_jk_apr_AprImpl_jkDestroy + }, + { + "jkInvoke", "(JJJI[BIII)I", + Java_org_apache_jk_apr_AprImpl_jkInvoke + }, + { + "jkRecycle", "(JJ)V", + Java_org_apache_jk_apr_AprImpl_jkRecycle + }, + { + "setUser", "(Ljava/lang/String;Ljava/lang/String;)I", + Java_org_apache_jk_apr_AprImpl_setUser + }, + { + "signal", "(I)I", + Java_org_apache_jk_apr_AprImpl_signal + }, + { + "sendSignal", "(II)V", + Java_org_apache_jk_apr_AprImpl_sendSignal + } +}; + +/* + Register Native methods returning the total number of + native functions +*/ +jint jk_jni_aprImpl_registerNatives(JNIEnv *jniEnv, jclass bridgeClass) +{ + + return (*jniEnv)->RegisterNatives(jniEnv, bridgeClass, + org_apache_jk_apr_AprImpl_native_methods, + sizeof(org_apache_jk_apr_AprImpl_native_methods) / + sizeof(JNINativeMethod)); }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>