costin      02/05/26 00:38:17

  Modified:    jk/native2/jni jk_jni_aprImpl.c org_apache_jk_apr_AprImpl.h
  Log:
  - removed code we don't need. ( creating and using directly the apr pools
  is overkill and dangerous, things are better handled by keeping them
  in the execution context - jk_endpoint ).
  
  - started to add the signal callbacks ( using the code in the jni channel ).
  The jni channel is not used only for in-process apache-tomcat communication,
  but for any callbacks from C to java ( i.e. you can have tomcat standalone
  using libjkjni.so to receive SIGHUP or any other callbacks we want ).
  
  - add jkInit/jkDestroy ( for component initialization )
  
  Revision  Changes    Path
  1.24      +114 -65   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.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- jk_jni_aprImpl.c  24 May 2002 04:30:07 -0000      1.23
  +++ jk_jni_aprImpl.c  26 May 2002 07:38:17 -0000      1.24
  @@ -91,7 +91,9 @@
   #include "apr_shm.h"
   #endif
   
  +#ifdef HAVE_SIGNAL
   #include "signal.h"
  +#endif
   
   static apr_pool_t *jniAprPool;
   static jk_workerEnv_t *workerEnv;
  @@ -152,55 +154,86 @@
       return 0;
   }
   
  -JNIEXPORT jlong JNICALL 
  -Java_org_apache_jk_apr_AprImpl_poolCreate(JNIEnv *jniEnv, jobject _jthis, jlong 
parentP)
  -{
  -    apr_pool_t *parent;
  -    apr_pool_t *child;
  -
  -    parent=(apr_pool_t *)(void *)(long)parentP;
  -    apr_pool_create( &child, parent );
  -    return (jlong)(long)child;
  -}
  -
  -JNIEXPORT jlong JNICALL 
  -Java_org_apache_jk_apr_AprImpl_poolClear(JNIEnv *jniEnv, jobject _jthis,
  -                                         jlong poolP)
  -{
  -    apr_pool_t *pool;
  -
  -    pool=(apr_pool_t *)(void *)(long)poolP;
  -    apr_pool_clear( pool );
  -    return 0;
  -}
  -
   /* -------------------- Signals -------------------- */
  +
   #ifdef HAVE_SIGNALS
   static struct sigaction jkAction;
   
  +/* We use a jni channel to send the notification to java
  + */
  +static jk_channel_t *jniChannel;
  +
  +/* XXX we should sync or use multiple endpoints if multiple signals
  +   can be concurent
  +*/
  +static jk_endpoint_t *signalEndpoint;
  +
   static void jk2_SigAction(int sig) {
  -    fprintf(stderr, "Signal %d\n", sig );
  +    jk_env_t *env;
       
       /* Make a callback using the jni channel */
  +    fprintf(stderr, "Signal %d\n", sig );
  +
  +    if( jk_env_globalEnv == NULL ) {
  +        return;
  +    }
  +
  +    env=jk_env_globalEnv->getEnv( jk_env_globalEnv );
  +
  +    if( jniChannel==NULL ) {
  +        jniChannel=env->getByName( env, "channel.jni:jni" );
  +        fprintf(stderr, "Got jniChannel %p\n", jniChannel );
  +    }
  +    if( jniChannel==NULL ) {
  +        return;
  +    }
  +    if( signalEndpoint == NULL ) {
  +        jk_bean_t *component=env->createBean2( env, NULL, "endpoint", NULL );
  +        if( component == NULL ) {
  +            fprintf(stderr, "Can't create endpoint\n" );
  +            return;
  +        }
  +        component->init( env, component );
  +        fprintf(stderr, "Create endpoint %p\n", component->object );
  +        signalEndpoint=component->object;
  +    }
  +
  +    /* Channel:jni should be initialized by the caller */
  +
  +    /* XXX make the callback */
       
  -    signal( sig, jk2_SigAction );
  +    jk_env_globalEnv->releaseEnv( jk_env_globalEnv, env );
  +
   }
  -#endif
  +
   
   /* XXX We need to: - preserve the old signal ( or get them ) - either
        implement "waitSignal" or use invocation in jk2_SigAction
   
        Probably waitSignal() is better ( we can have a thread that waits )
  -*/
  + */
   
   JNIEXPORT jint JNICALL 
   Java_org_apache_jk_apr_AprImpl_signal(JNIEnv *jniEnv, jobject _jthis, jint signalNr 
)
   {
  -#ifdef HAVE_SIGNALS
       memset(& jkAction, 0, sizeof(jkAction));
       jkAction.sa_handler=jk2_SigAction;
       sigaction((int)signalNr, &jkAction, (void *) NULL);
  -#endif
  +    return 0;
  +}
  +
  +JNIEXPORT jint JNICALL 
  +Java_org_apache_jk_apr_AprImpl_sendSignal(JNIEnv *jniEnv, jobject _jthis, jint 
target ,
  +                                          jint signo)
  +{
  +    return kill( (pid_t)target, (int)signo );
  +}
  +
  +#else /* ! HAVE_SIGNALS */
  +
  +JNIEXPORT jint JNICALL 
  +Java_org_apache_jk_apr_AprImpl_signal(JNIEnv *jniEnv, jobject _jthis, jint signalNr 
)
  +{
       return 0;
   }
   
  @@ -208,10 +241,12 @@
   Java_org_apache_jk_apr_AprImpl_sendSignal(JNIEnv *jniEnv, jobject _jthis, jint 
signo,
                                             jlong target)
   {
  -    
       return 0;
   }
   
  +#endif
  +
  +
   /* -------------------- User related functions -------------------- */
   
   JNIEXPORT jint JNICALL 
  @@ -262,10 +297,13 @@
      'native' calls. For 'tcp' sockets we just use what java provides.
   */
   
  +/* XXX @deprecated !!! All this will move to jk_channel_un, and we'll
  +   use the same dispatch that we use for the jni channel !!!
  +*/
      
   JNIEXPORT jlong JNICALL 
   Java_org_apache_jk_apr_AprImpl_unSocketClose(JNIEnv *jniEnv, jobject _jthis, 
  -                                             jlong poolJ, jlong socketJ, jint typeJ 
)
  +                                             jlong socketJ, jint typeJ )
   {
       int socket=(int)socketJ;
       int type=(int)typeJ;
  @@ -276,9 +314,8 @@
   
   JNIEXPORT jlong JNICALL 
   Java_org_apache_jk_apr_AprImpl_unSocketListen(JNIEnv *jniEnv, jobject _jthis, 
  -                                              jlong poolJ, jstring hostJ, jint 
backlog )
  +                                              jstring hostJ, jint backlog )
   {
  -    apr_pool_t *pool=(apr_pool_t *)(void *)(long)poolJ;
       const char *host;
       int status;
       int unixSocket=-1L;
  @@ -325,9 +362,8 @@
   
   JNIEXPORT jlong JNICALL 
   Java_org_apache_jk_apr_AprImpl_unSocketConnect(JNIEnv *jniEnv, jobject _jthis, 
  -                                               jlong poolJ, jstring hostJ )
  +                                               jstring hostJ )
   {
  -    apr_pool_t *pool=(apr_pool_t *)(void *)(long)poolJ;
       const char *host;
       int status;
       int unixSocket=-1L;
  @@ -366,7 +402,7 @@
   
   JNIEXPORT jlong JNICALL 
   Java_org_apache_jk_apr_AprImpl_unAccept(JNIEnv *jniEnv, jobject _jthis, 
  -                                      jlong poolJ, jlong unSocketJ)
  +                                      jlong unSocketJ)
   {
   #ifdef HAVE_UNIXSOCKETS
       int listenUnSocket=(int)unSocketJ;
  @@ -381,10 +417,6 @@
   
           fprintf(stderr, "unAccept %d\n", listenUnSocket );
   
  -#ifdef HAVE_SIGNALS
  -/*         signal( SIGCHLD, SIG_IGN ); */
  -/*         signal( SIGIO, jk2_SigAction ); */
  -#endif        
           clientlen=sizeof( client );
           
           connfd=accept( listenUnSocket, (struct sockaddr *)&client, &clientlen );
  @@ -410,11 +442,10 @@
   
   JNIEXPORT jint JNICALL 
   Java_org_apache_jk_apr_AprImpl_unRead(JNIEnv *jniEnv, jobject _jthis, 
  -                                      jlong poolJ, jlong unSocketJ,
  +                                      jlong unSocketJ,
                                         jbyteArray jbuf, jint from, jint cnt)
   {
   #ifdef HAVE_UNIXSOCKETS
  -    apr_pool_t *pool=(apr_pool_t *)(void *)(long)poolJ;
       jbyte *nbuf;
       int rd;
       jboolean iscopy;
  @@ -455,10 +486,9 @@
   
   JNIEXPORT jint JNICALL 
   Java_org_apache_jk_apr_AprImpl_unWrite(JNIEnv *jniEnv, jobject _jthis, 
  -                                     jlong poolJ, jlong unSocketJ, jbyteArray jbuf, 
jint from, jint cnt)
  +                                     jlong unSocketJ, jbyteArray jbuf, jint from, 
jint cnt)
   {
       apr_status_t status;
  -    apr_pool_t *pool=(apr_pool_t *)(void *)(long)poolJ;
       jbyte *nbuf;
       int rd=0;
   #ifdef HAVE_UNIXSOCKETS
  @@ -549,7 +579,7 @@
   }
   
   /*
  -  Recycle the jk env 
  +  Recycle the jk endpoint
   */
   JNIEXPORT void JNICALL 
   Java_org_apache_jk_apr_AprImpl_jkRecycle
  @@ -596,7 +626,7 @@
   }
   
   /*
  -  Create a jk handler
  +  Create a jk handler XXX It should be createJkBean
   */
   JNIEXPORT jlong JNICALL 
   Java_org_apache_jk_apr_AprImpl_createJkHandler
  @@ -638,6 +668,44 @@
   
   /*
   */
  +JNIEXPORT jint JNICALL 
  +Java_org_apache_jk_apr_AprImpl_jkInit
  +  (JNIEnv *jniEnv, jobject o, jlong xEnv, jlong componentP )
  +{
  +    jk_env_t *env=(jk_env_t *)(void *)(long)xEnv;
  +    jk_bean_t *component=(jk_bean_t *)(void *)(long)componentP;
  +    int rc;
  +    
  +    if( component->init ==NULL )
  +        return JK_OK;
  +    
  +    rc=component->init( env, component );
  +
  +    return rc;
  +}
  +
  +/*
  +*/
  +JNIEXPORT jint JNICALL 
  +Java_org_apache_jk_apr_AprImpl_jkDestroy
  +  (JNIEnv *jniEnv, jobject o, jlong xEnv, jlong componentP )
  +{
  +    jk_env_t *env=(jk_env_t *)(void *)(long)xEnv;
  +    jk_bean_t *component=(jk_bean_t *)(void *)(long)componentP;
  +    int rc;
  +    
  +    if( component->destroy ==NULL )
  +        return JK_OK;
  +    
  +    rc=component->destroy( env, component );
  +
  +    /* XXX component->pool->reset( env, component->pool ); */
  +    
  +    return rc;
  +}
  +
  +/*
  +*/
   JNIEXPORT jstring JNICALL 
   Java_org_apache_jk_apr_AprImpl_jkGetAttribute
     (JNIEnv *jniEnv, jobject o, jlong xEnv, jlong componentP, jstring nameJ)
  @@ -661,26 +729,6 @@
       return valueJ;
   }
   
  -/*
  -*/
  -JNIEXPORT jint JNICALL 
  -Java_org_apache_jk_apr_AprImpl_jkGetId
  -  (JNIEnv *jniEnv, jobject o, jlong xEnv, jstring nsJ, jstring nameJ)
  -{
  -    jk_env_t *env=(jk_env_t *)(void *)(long)xEnv;
  -    char *name=(char *)(*jniEnv)->GetStringUTFChars(jniEnv, nameJ, 0);
  -    char *value;
  -    int rc=-1;
  -    int i=0;
  -
  -    env->l->jkLog(env, env->l, JK_LOG_INFO, 
  -                  "aprImpl.getId()  %d %s\n", rc, name );
  -        
  -    (*jniEnv)->ReleaseStringUTFChars(jniEnv, nameJ, name);
  -    
  -    return rc;
  -}
  -
   
   /*
   */
  @@ -749,4 +797,5 @@
   
       return rc;
   }
  +
   
  
  
  
  1.3       +6 -61     
jakarta-tomcat-connectors/jk/native2/jni/org_apache_jk_apr_AprImpl.h
  
  Index: org_apache_jk_apr_AprImpl.h
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/native2/jni/org_apache_jk_apr_AprImpl.h,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- org_apache_jk_apr_AprImpl.h       12 May 2002 01:10:56 -0000      1.2
  +++ org_apache_jk_apr_AprImpl.h       26 May 2002 07:38:17 -0000      1.3
  @@ -36,21 +36,6 @@
   JNIEXPORT jint JNICALL Java_org_apache_jk_apr_AprImpl_terminate
     (JNIEnv *, jobject);
   
  -/*
  - * Class:     org_apache_jk_apr_AprImpl
  - * Method:    poolCreate
  - * Signature: (J)J
  - */
  -JNIEXPORT jlong JNICALL Java_org_apache_jk_apr_AprImpl_poolCreate
  -  (JNIEnv *, jobject, jlong);
  -
  -/*
  - * Class:     org_apache_jk_apr_AprImpl
  - * Method:    poolClear
  - * Signature: (J)J
  - */
  -JNIEXPORT jlong JNICALL Java_org_apache_jk_apr_AprImpl_poolClear
  -  (JNIEnv *, jobject, jlong);
   
   /*
    * Class:     org_apache_jk_apr_AprImpl
  @@ -58,7 +43,7 @@
    * Signature: (JJI)J
    */
   JNIEXPORT jlong JNICALL Java_org_apache_jk_apr_AprImpl_unSocketClose
  -  (JNIEnv *, jobject, jlong, jlong, jint);
  +  (JNIEnv *, jobject, jlong, jint);
   
   /*
    * Class:     org_apache_jk_apr_AprImpl
  @@ -66,7 +51,7 @@
    * Signature: (JLjava/lang/String;I)J
    */
   JNIEXPORT jlong JNICALL Java_org_apache_jk_apr_AprImpl_unSocketListen
  -  (JNIEnv *, jobject, jlong, jstring, jint);
  +  (JNIEnv *, jobject, jstring, jint);
   
   /*
    * Class:     org_apache_jk_apr_AprImpl
  @@ -74,7 +59,7 @@
    * Signature: (JLjava/lang/String;)J
    */
   JNIEXPORT jlong JNICALL Java_org_apache_jk_apr_AprImpl_unSocketConnect
  -  (JNIEnv *, jobject, jlong, jstring);
  +  (JNIEnv *, jobject, jstring);
   
   /*
    * Class:     org_apache_jk_apr_AprImpl
  @@ -82,7 +67,7 @@
    * Signature: (JJ)J
    */
   JNIEXPORT jlong JNICALL Java_org_apache_jk_apr_AprImpl_unAccept
  -  (JNIEnv *, jobject, jlong, jlong);
  +  (JNIEnv *, jobject, jlong);
   
   /*
    * Class:     org_apache_jk_apr_AprImpl
  @@ -90,7 +75,7 @@
    * Signature: (JJ[BII)I
    */
   JNIEXPORT jint JNICALL Java_org_apache_jk_apr_AprImpl_unRead
  -  (JNIEnv *, jobject, jlong, jlong, jbyteArray, jint, jint);
  +  (JNIEnv *, jobject, jlong, jbyteArray, jint, jint);
   
   /*
    * Class:     org_apache_jk_apr_AprImpl
  @@ -98,47 +83,7 @@
    * Signature: (JJ[BII)I
    */
   JNIEXPORT jint JNICALL Java_org_apache_jk_apr_AprImpl_unWrite
  -  (JNIEnv *, jobject, jlong, jlong, jbyteArray, jint, jint);
  -
  -/*
  - * Class:     org_apache_jk_apr_AprImpl
  - * Method:    mutexCreate
  - * Signature: (JLjava/lang/String;I)J
  - */
  -JNIEXPORT jlong JNICALL Java_org_apache_jk_apr_AprImpl_mutexCreate
  -  (JNIEnv *, jobject, jlong, jstring, jint);
  -
  -/*
  - * Class:     org_apache_jk_apr_AprImpl
  - * Method:    mutexLock
  - * Signature: (JJ)J
  - */
  -JNIEXPORT jlong JNICALL Java_org_apache_jk_apr_AprImpl_mutexLock
  -  (JNIEnv *, jobject, jlong, jlong);
  -
  -/*
  - * Class:     org_apache_jk_apr_AprImpl
  - * Method:    mutexUnLock
  - * Signature: (JJ)J
  - */
  -JNIEXPORT jlong JNICALL Java_org_apache_jk_apr_AprImpl_mutexUnLock
  -  (JNIEnv *, jobject, jlong, jlong);
  -
  -/*
  - * Class:     org_apache_jk_apr_AprImpl
  - * Method:    mutexTryLock
  - * Signature: (JJ)J
  - */
  -JNIEXPORT jlong JNICALL Java_org_apache_jk_apr_AprImpl_mutexTryLock
  -  (JNIEnv *, jobject, jlong, jlong);
  -
  -/*
  - * Class:     org_apache_jk_apr_AprImpl
  - * Method:    mutexDestroy
  - * Signature: (JJ)J
  - */
  -JNIEXPORT jlong JNICALL Java_org_apache_jk_apr_AprImpl_mutexDestroy
  -  (JNIEnv *, jobject, jlong, jlong);
  +  (JNIEnv *, jobject, jlong, jbyteArray, jint, jint);
   
   /*
    * Class:     org_apache_jk_apr_AprImpl
  
  
  

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

Reply via email to