mturk 2005/06/30 00:10:29 Modified: jni/java/org/apache/tomcat/jni Stdlib.java jni/native/include tcn.h jni/native/src jnilib.c proc.c stdlib.c Log: Add getpid and getppid functions. The getppid function on WIndows is simulated by passing the environment value to the child process. Revision Changes Path 1.3 +13 -1 jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/Stdlib.java Index: Stdlib.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/Stdlib.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Stdlib.java 14 Jan 2005 14:42:37 -0000 1.2 +++ Stdlib.java 30 Jun 2005 07:10:29 -0000 1.3 @@ -74,4 +74,16 @@ */ public static native void free(long mem); + /** + * Get current process pid. + * @return current pid or < 1 in case of error. + */ + public static native int getpid(); + + /** + * Get current process parent pid. + * @return parent pid or < 1 in case of error. + */ + public static native int getppid(); + } 1.27 +2 -1 jakarta-tomcat-connectors/jni/native/include/tcn.h Index: tcn.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/include/tcn.h,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- tcn.h 23 Jun 2005 08:58:05 -0000 1.26 +++ tcn.h 30 Jun 2005 07:10:29 -0000 1.27 @@ -83,6 +83,7 @@ #define TCN_FINFO_CLASS TCN_CLASS_PATH "FileInfo" #define TCN_AINFO_CLASS TCN_CLASS_PATH "Sockaddr" #define TCN_ERROR_CLASS TCN_CLASS_PATH "Error" +#define TCN_PARENT_IDE "TCN_PARENT_ID" #define UNREFERENCED(P) (P) = (P) #define UNREFERENCED_STDARGS e = e; o = o 1.13 +12 -2 jakarta-tomcat-connectors/jni/native/src/jnilib.c Index: jnilib.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/jnilib.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- jnilib.c 23 Jun 2005 08:58:05 -0000 1.12 +++ jnilib.c 30 Jun 2005 07:10:29 -0000 1.13 @@ -42,6 +42,8 @@ static jmethodID jString_init; static jmethodID jString_getBytes; +int tcn_parent_pid = 0; + /* Called by the JVM when APR_JAVA is loaded */ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { @@ -67,7 +69,15 @@ return JNI_ERR; if(tcn_load_ainfo_class(env, jAinfo_class) != APR_SUCCESS) return JNI_ERR; - +#ifdef WIN32 + { + char *ppid = getenv(TCN_PARENT_IDE); + if (ppid) + tcn_parent_pid = atoi(ppid); + } +#else + tcn_parent_pid = getppid(); +#endif apr_initialize(); return JNI_VERSION_1_4; 1.6 +19 -4 jakarta-tomcat-connectors/jni/native/src/proc.c Index: proc.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/proc.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- proc.c 17 Jun 2005 09:41:30 -0000 1.5 +++ proc.c 30 Jun 2005 07:10:29 -0000 1.6 @@ -209,7 +209,7 @@ as = (*e)->GetArrayLength(e, args); if (env) es = (*e)->GetArrayLength(e, args); - if (as > MAX_ARGS_SIZE || es > MAX_ENV_SIZE) { + if (as > (MAX_ARGS_SIZE - 1) || es > (MAX_ENV_SIZE - 2)) { TCN_FREE_CSTRING(progname); return APR_EINVAL; } @@ -219,19 +219,34 @@ s_args[i] = tcn_get_string(e, str); (*e)->DeleteLocalRef(e, str); } + s_args[i] = NULL; pargs = (const char * const *)&s_args[0]; } if (es) { for (i = 0; i < es; i++) { jstring str = (*e)->GetObjectArrayElement(e, env, i); - s_env[i] = tcn_get_string(e, str); + s_env[i+1] = tcn_get_string(e, str); (*e)->DeleteLocalRef(e, str); } +#ifdef WIN32 + s_env[i++] = apr_psprintf(p, TCN_PARENT_IDE "=%d", getpid()); +#endif + s_env[i] = NULL; penv = (const char * const *)&s_env[0]; } - +#ifdef WIN32 + else { + char pps[32]; + itoa(getpid(), pps, 10); + SetEnvironmentVariable(TCN_PARENT_IDE, pps); + } +#endif rv = apr_proc_create(np, J2S(progname), pargs, penv, a, p); +#ifdef WIN32 + if (!es) + SetEnvironmentVariable(TCN_PARENT_IDE, NULL); +#endif /* Free local resources */ TCN_FREE_CSTRING(progname); 1.4 +15 -1 jakarta-tomcat-connectors/jni/native/src/stdlib.c Index: stdlib.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/stdlib.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- stdlib.c 17 Jun 2005 09:41:30 -0000 1.3 +++ stdlib.c 30 Jun 2005 07:10:29 -0000 1.4 @@ -21,6 +21,8 @@ #include "tcn.h" +extern int tcn_parent_pid; + TCN_IMPLEMENT_CALL(jlong, Stdlib, malloc)(TCN_STDARGS, jint size) { UNREFERENCED_STDARGS; @@ -103,3 +105,15 @@ return JNI_FALSE; } +TCN_IMPLEMENT_CALL(jint, Stdlib, getpid)(TCN_STDARGS) +{ + UNREFERENCED_STDARGS; + return (jint)getpid(); +} + +TCN_IMPLEMENT_CALL(jint, Stdlib, getppid)(TCN_STDARGS) +{ + UNREFERENCED_STDARGS; + return (jint)tcn_parent_pid; +} +
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]