costin 2002/06/11 15:51:30 Modified: jk/native2/jni jk_jni_aprImpl.c Log: Remove the moved code. Few cleanups, start using 2 macros from conversion jlong to/from pointer. Revision Changes Path 1.37 +30 -191 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.36 retrieving revision 1.37 diff -u -r1.36 -r1.37 --- jk_jni_aprImpl.c 11 Jun 2002 02:51:18 -0000 1.36 +++ jk_jni_aprImpl.c 11 Jun 2002 22:51:29 -0000 1.37 @@ -79,27 +79,12 @@ #include "jk_pool.h" #include "jk_logger.h" -#ifndef WIN32 -#include <unistd.h> -#include <pwd.h> -#endif - #if APR_HAVE_SYS_TYPES_H #include <sys/types.h> #endif -#if APR_HAS_SHARED_MEMORY -#include "apr_shm.h" -#endif - -#ifdef HAVE_SIGNAL -#include "signal.h" -#endif - -/* 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; +#define P2J(jk_pointer) ((jlong)(long)(void *)jk_pointer) +#define J2P(p, jktype) ((jktype)(void *)(long)p) /** Access to the jk workerEnv. This field and jk_env_globalEnv are used to interact with the jk components @@ -122,7 +107,13 @@ } /* -------------------- Apr initialization and pools -------------------- */ - + +/** Initialize APR and jk, for standalone use. If we use in-process mode, + i.e. an application using jk to launch an in-process JVM - this function + will not do anything, since the setup is already done. + + The code is identical with what mod_jk is doing. +*/ JNIEXPORT jint JNICALL Java_org_apache_jk_apr_AprImpl_initialize(JNIEnv *jniEnv, jobject _jthis) { @@ -130,6 +121,7 @@ /* For in-process the env is initialized already */ if( jk_env_globalEnv == NULL ) { + apr_pool_t *jniAprPool=NULL; jk_pool_t *globalPool; apr_initialize(); @@ -182,6 +174,8 @@ JNIEXPORT jint JNICALL Java_org_apache_jk_apr_AprImpl_terminate(JNIEnv *jniEnv, jobject _jthis) { + apr_pool_t *jniAprPool=jk_env_globalEnv->getAprPool(jk_env_globalEnv); + if ( jniAprPool!=NULL ) { apr_pool_destroy(jniAprPool); jniAprPool = NULL; @@ -190,144 +184,6 @@ return 0; } -/* -------------------- Signals -------------------- */ -/* XXX Move it to jk_signal.c */ - -#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) { - 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 %#lx\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 %#lx\n", component->object ); - signalEndpoint=component->object; - } - - /* Channel:jni should be initialized by the caller */ - - /* XXX make the callback */ - - jk_env_globalEnv->releaseEnv( jk_env_globalEnv, env ); - -} - - -/* 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 ) -{ - memset(& jkAction, 0, sizeof(jkAction)); - jkAction.sa_handler=jk2_SigAction; - sigaction((int)signalNr, &jkAction, (void *) NULL); - 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; -} - -JNIEXPORT void JNICALL -Java_org_apache_jk_apr_AprImpl_sendSignal(JNIEnv *jniEnv, jobject _jthis, jint signo, - jint target) -{ - -} - -#endif - - -/* -------------------- User related functions -------------------- */ -/* XXX move it to jk_user.c */ - -JNIEXPORT jint JNICALL -Java_org_apache_jk_apr_AprImpl_getPid(JNIEnv *jniEnv, jobject _jthis) -{ - return (jint) getpid(); -} - - -JNIEXPORT jint JNICALL -Java_org_apache_jk_apr_AprImpl_setUser(JNIEnv *jniEnv, jobject _jthis, - jstring userJ, jstring groupJ) -{ - int rc=0; -#ifndef WIN32 - const char *user; - char *group; - struct passwd *passwd; - int uid; - int gid; - - user = (*jniEnv)->GetStringUTFChars(jniEnv, userJ, 0); - - passwd = getpwnam(user); - - (*jniEnv)->ReleaseStringUTFChars(jniEnv, userJ, user); - - if (passwd == NULL ) { - return -1; - } - uid = passwd->pw_uid; - gid = passwd->pw_gid; - - if (uid < 0 || gid < 0 ) - return -2; - - rc = setuid(uid); - -#endif - - return (jint)rc; -} - /* -------------------- Access jk components -------------------- */ /* @@ -345,12 +201,8 @@ if( jk_env_globalEnv == NULL ) return 0; - /* fprintf(stderr, "Get env %#lx\n", jk_env_globalEnv); */ env=jk_env_globalEnv->getEnv( jk_env_globalEnv ); - /* if( env!=NULL) */ - /* env->l->jkLog(env, env->l, JK_LOG_INFO, */ - /* "aprImpl.getJkEnv() %#lx\n", env); */ - return (jlong)(long)(void *)env; + return P2J(env); } @@ -361,7 +213,7 @@ Java_org_apache_jk_apr_AprImpl_releaseJkEnv (JNIEnv *jniEnv, jobject o, jlong xEnv ) { - jk_env_t *env=(jk_env_t *)(void *)(long)xEnv; + jk_env_t *env=J2P( xEnv, jk_env_t *); if( jk_env_globalEnv != NULL ) jk_env_globalEnv->releaseEnv( jk_env_globalEnv, env ); @@ -372,14 +224,16 @@ } /* - Recycle the jk endpoint -*/ + * Recycle the jk endpoint. Will reset the tmp pool and clean error + * state. + */ JNIEXPORT void JNICALL Java_org_apache_jk_apr_AprImpl_jkRecycle (JNIEnv *jniEnv, jobject o, jlong xEnv, jlong endpointP ) { - jk_env_t *env=(jk_env_t *)(void *)(long)xEnv; - jk_bean_t *compCtx=(jk_bean_t *)(void *)(long)endpointP; + jk_env_t *env= J2P( xEnv, jk_env_t *); + jk_bean_t *compCtx= J2P( endpointP, jk_bean_t *); + jk_endpoint_t *ep = (compCtx==NULL ) ? NULL : compCtx->object; if( env == NULL ) @@ -390,32 +244,26 @@ } env->recycleEnv( env ); - - /* env->l->jkLog(env, env->l, JK_LOG_INFO, */ - /* "aprImpl.releaseJkEnv() %#lx\n", env); */ } - /* - Find a jk component. -*/ + * Find a jk component. + */ JNIEXPORT jlong JNICALL Java_org_apache_jk_apr_AprImpl_getJkHandler (JNIEnv *jniEnv, jobject o, jlong xEnv, jstring compNameJ) { - jk_env_t *env=(jk_env_t *)(void *)(long)xEnv; + jk_env_t *env= J2P(xEnv, jk_env_t *); + jk_bean_t *component; char *cname=(char *)(*jniEnv)->GetStringUTFChars(jniEnv, compNameJ, 0); component=env->getBean( env, cname ); - /* env->l->jkLog(env, env->l, JK_LOG_INFO, */ - /* "aprImpl.getJkHandler() %#lx %s\n", component, cname ); */ - (*jniEnv)->ReleaseStringUTFChars(jniEnv, compNameJ, cname); - return (jlong)(long)(void *)component; + return P2J(component); } /* @@ -425,15 +273,17 @@ Java_org_apache_jk_apr_AprImpl_createJkHandler (JNIEnv *jniEnv, jobject o, jlong xEnv, jstring compNameJ) { - jk_env_t *env=(jk_env_t *)(void *)(long)xEnv; + jk_env_t *env= J2P(xEnv, jk_env_t *); + jk_bean_t *component; + char *cname=(char *)(*jniEnv)->GetStringUTFChars(jniEnv, compNameJ, 0); component=env->createBean( env, NULL, cname ); (*jniEnv)->ReleaseStringUTFChars(jniEnv, compNameJ, cname); - return (jlong)(long)(void *)component; + return P2J(component); } /* @@ -444,6 +294,7 @@ { jk_env_t *env=(jk_env_t *)(void *)(long)xEnv; jk_bean_t *component=(jk_bean_t *)(void *)(long)componentP; + char *name=(char *)(*jniEnv)->GetStringUTFChars(jniEnv, nameJ, 0); char *value=(char *)(*jniEnv)->GetStringUTFChars(jniEnv, valueJ, 0); int rc=JK_OK; @@ -702,18 +553,6 @@ "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 - } }; /*
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>