costin 02/04/18 15:52:33 Modified: jk/native2/jni jk_jni_aprImpl.c Log: Few fixes. Now the scoreboard works from the java side as well. Started work on the mutexes. Revision Changes Path 1.12 +128 -3 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.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- jk_jni_aprImpl.c 17 Apr 2002 22:51:02 -0000 1.11 +++ jk_jni_aprImpl.c 18 Apr 2002 22:52:33 -0000 1.12 @@ -199,9 +199,28 @@ apr_status_t rv; apr_shm_t *aprShm; + rv = apr_shm_attach(&aprShm, fname, pool); + + (*jniEnv)->ReleaseStringUTFChars(jniEnv, fileJ, fname); + + if (rv != APR_SUCCESS) { + return (jlong)NULL; + } + return (jlong)(long)(void *)aprShm; +} + +JNIEXPORT jlong JNICALL +Java_org_apache_jk_apr_AprImpl_shmCreate(JNIEnv *jniEnv, jobject _jthis, jlong poolJ, + jlong size, jstring fileJ) +{ + char *fname=(char *)(*jniEnv)->GetStringUTFChars(jniEnv, fileJ, 0); + apr_pool_t *pool=(apr_pool_t *)(void *)(long)poolJ; + apr_status_t rv; + apr_shm_t *aprShm; + apr_file_remove(fname, pool); /* ignore errors */ - rv = apr_shm_attach(&aprShm, fname, pool); + rv = apr_shm_create(&aprShm, size, fname, pool); (*jniEnv)->ReleaseStringUTFChars(jniEnv, fileJ, fname); @@ -218,8 +237,10 @@ { apr_shm_t *shm=(apr_shm_t *)(void *)(long)shmP; void *sb_shared; - + + fprintf(stderr, "GET BASE ADDR %p", shmP ); sb_shared = apr_shm_baseaddr_get(shm); + fprintf(stderr, "GOt BASE ADDR %p", sb_shared ); return (jlong)(long)(void *)sb_shared; } @@ -251,6 +272,56 @@ return apr_shm_destroy(shm); } + +JNIEXPORT jint JNICALL +Java_org_apache_jk_apr_AprImpl_shmRead(JNIEnv *jniEnv, jobject _jthis, + jlong poolJ, jlong mP, + jbyteArray bufJ, jint from, jint cnt) +{ + apr_pool_t *pool=(apr_pool_t *)(void *)(long)poolJ; + char *mem=(char *)(void *)(long)mP; + jbyte *nbuf; + int rd; + jboolean iscommit; + + nbuf = (*jniEnv)->GetByteArrayElements(jniEnv, bufJ, &iscommit); + if( ! nbuf ) { + return -1; + } + + memcpy( nbuf + from, mem, cnt ); + + (*jniEnv)->ReleaseByteArrayElements(jniEnv, bufJ, nbuf, 0); + return (jint)cnt; +} + +JNIEXPORT jint JNICALL +Java_org_apache_jk_apr_AprImpl_shmWrite(JNIEnv *jniEnv, jobject _jthis, + jlong poolJ, jlong mP, + jbyteArray bufJ, jint from, jint cnt) +{ + apr_status_t status; + apr_pool_t *pool=(apr_pool_t *)(void *)(long)poolJ; + jbyte *nbuf; + char *mem=(char *)(void *)(long)mP; + int rd; + jboolean iscommit; + + nbuf = (*jniEnv)->GetByteArrayElements(jniEnv, bufJ, &iscommit); + if( ! nbuf ) { + return -1; + } + + /* write */ + memcpy( mem, nbuf + from, cnt ); + + (*jniEnv)->ReleaseByteArrayElements(jniEnv, bufJ, nbuf, 0); + return (jint)rd; +} + + + + #else @@ -261,6 +332,12 @@ return (jlong)0; } +JNIEXPORT jlong JNICALL +Java_org_apache_jk_apr_AprImpl_shmCreate(JNIEnv *jniEnv, jobject _jthis, jlong poolJ, + jstring fileJ) +{ + return (jlong)0; +} JNIEXPORT jlong JNICALL Java_org_apache_jk_apr_AprImpl_shmBaseaddrGet(JNIEnv *jniEnv, jobject _jthis, jlong pool, @@ -296,7 +373,7 @@ /* -------------------- interprocess mutexes -------------------- */ JNIEXPORT jlong JNICALL -Java_org_apache_jk_apr_AprImpl_mutexCreate(JNIEnv *jniEnv, jobject _jthis, jlong pool, +Java_org_apache_jk_apr_AprImpl_mutexCreate(JNIEnv *jniEnv, jobject _jthis, jlong poolP, jstring fileJ, jint mechJ ) { @@ -309,6 +386,54 @@ st=apr_proc_mutex_create( &mutex, fname, mech, pool ); return (jlong)(long)(void *)mutex; +} + +JNIEXPORT jlong JNICALL +Java_org_apache_jk_apr_AprImpl_mutexLock(JNIEnv *jniEnv, jobject _jthis, jlong poolP, + jlong mutexP ) +{ + apr_proc_mutex_t *mutex=(apr_proc_mutex_t *)(void *)(long)mutexP; + apr_status_t st; + + st=apr_proc_mutex_lock( mutex ); + + return (jlong)(long)st; +} + +JNIEXPORT jlong JNICALL +Java_org_apache_jk_apr_AprImpl_mutexTryLock(JNIEnv *jniEnv, jobject _jthis, jlong poolP, + jlong mutexP ) +{ + apr_proc_mutex_t *mutex=(apr_proc_mutex_t *)(void *)(long)mutexP; + apr_status_t st; + + st=apr_proc_mutex_trylock( mutex ); + + return (jlong)(long)st; +} + +JNIEXPORT jlong JNICALL +Java_org_apache_jk_apr_AprImpl_mutexUnLock(JNIEnv *jniEnv, jobject _jthis, jlong poolP, + jlong mutexP ) +{ + apr_proc_mutex_t *mutex=(apr_proc_mutex_t *)(void *)(long)mutexP; + apr_status_t st; + + st=apr_proc_mutex_unlock( mutex ); + + return (jlong)(long)st; +} + +JNIEXPORT jlong JNICALL +Java_org_apache_jk_apr_AprImpl_mutexDestroy(JNIEnv *jniEnv, jobject _jthis, jlong poolP, + jlong mutexP ) +{ + apr_proc_mutex_t *mutex=(apr_proc_mutex_t *)(void *)(long)mutexP; + apr_status_t st; + + st=apr_proc_mutex_destroy( mutex ); + + return (jlong)(long)st; }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>