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

Reply via email to