mturk 2005/06/09 04:13:40 Modified: jni/java/org/apache/tomcat/jni Status.java jni/native/include tcn.h jni/native/src error.c network.c poll.c Log: Use user errors for TIMEUP and EAGAIN. This way we'll be able to save an extra JNI call on each poll or sendfile. Revision Changes Path 1.7 +4 -1 jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/Status.java Index: Status.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/Status.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- Status.java 19 Apr 2005 16:32:11 -0000 1.6 +++ Status.java 9 Jun 2005 11:13:40 -0000 1.7 @@ -175,6 +175,9 @@ public static final int APR_EMISMATCH = (APR_OS_START_STATUS + 24); public static final int APR_EBUSY = (APR_OS_START_STATUS + 25); + public static final int TIMEUP = (APR_OS_START_USERERR + 1); + public static final int EAGAIN = (APR_OS_START_USERERR + 2); + private static native boolean is(int err, int idx); /** * APR_STATUS_IS Status Value Tests 1.14 +4 -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.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- tcn.h 8 Jun 2005 07:16:33 -0000 1.13 +++ tcn.h 9 Jun 2005 11:13:40 -0000 1.14 @@ -39,6 +39,9 @@ #define APR_MAX_IOVEC_SIZE 1024 #endif +#define TCN_TIMEUP APR_OS_START_USERERR + 1 +#define TCN_EAGAIN APR_OS_START_USERERR + 2 + #define TCN_CLASS_PATH "org/apache/tomcat/jni/" #define TCN_FINFO_CLASS TCN_CLASS_PATH "FileInfo" #define TCN_AINFO_CLASS TCN_CLASS_PATH "Sockaddr" 1.11 +9 -3 jakarta-tomcat-connectors/jni/native/src/error.c Index: error.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/error.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- error.c 7 Jun 2005 10:08:08 -0000 1.10 +++ error.c 9 Jun 2005 11:13:40 -0000 1.11 @@ -173,7 +173,10 @@ APR_IS(54, APR_STATUS_IS_NOTDETACH); APR_IS(55, APR_STATUS_IS_CHILD_DONE); APR_IS(56, APR_STATUS_IS_CHILD_NOTDONE); - APR_IS(57, APR_STATUS_IS_TIMEUP); + case 57: + if (APR_STATUS_IS_TIMEUP(err) || err == TCN_TIMEUP) + return JNI_TRUE; + break; APR_IS(58, APR_STATUS_IS_INCOMPLETE); /* empty slot: +9 */ /* empty slot: +10 */ @@ -193,7 +196,10 @@ APR_IS(74, APR_STATUS_IS_EMISMATCH); APR_IS(75, APR_STATUS_IS_EBUSY); /* Socket errors */ - APR_IS(90, APR_STATUS_IS_EAGAIN); + case 90: + if (APR_STATUS_IS_EAGAIN(err) || err == TCN_EAGAIN) + return JNI_TRUE; + break; APR_IS(91, TCN_STATUS_IS_ETIMEDOUT); APR_IS(92, APR_STATUS_IS_ECONNABORTED); APR_IS(93, APR_STATUS_IS_ECONNRESET); 1.24 +41 -11 jakarta-tomcat-connectors/jni/native/src/network.c Index: network.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/network.c,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- network.c 30 May 2005 06:15:52 -0000 1.23 +++ network.c 9 Jun 2005 11:13:40 -0000 1.24 @@ -291,8 +291,11 @@ (*e)->ReleaseByteArrayElements(e, buf, bytes, JNI_ABORT); if (ss == APR_SUCCESS) return (jint)nbytes; - else + else { + if (APR_STATUS_IS_EAGAIN(ss)) + ss = TCN_EAGAIN; return -(jint)ss; + } } TCN_IMPLEMENT_CALL(jint, Socket, sendb)(TCN_STDARGS, jlong sock, @@ -311,8 +314,11 @@ if (ss == APR_SUCCESS) return (jint)nbytes; - else + else { + if (APR_STATUS_IS_EAGAIN(ss)) + ss = TCN_EAGAIN; return -(jint)ss; + } } TCN_IMPLEMENT_CALL(jint, Socket, sendv)(TCN_STDARGS, jlong sock, @@ -344,8 +350,11 @@ } if (ss == APR_SUCCESS) return (jint)written; - else + else { + if (APR_STATUS_IS_EAGAIN(ss)) + ss = TCN_EAGAIN; return -(jint)ss; + } } TCN_IMPLEMENT_CALL(jint, Socket, sendto)(TCN_STDARGS, jlong sock, @@ -376,8 +385,11 @@ (*e)->ReleaseByteArrayElements(e, buf, bytes, JNI_ABORT); if (ss == APR_SUCCESS) return (jint)nbytes; - else + else { + if (APR_STATUS_IS_EAGAIN(ss)) + ss = TCN_EAGAIN; return -(jint)ss; + } } TCN_IMPLEMENT_CALL(jint, Socket, recv)(TCN_STDARGS, jlong sock, @@ -397,8 +409,11 @@ nbytes ? 0 : JNI_ABORT); if (ss == APR_SUCCESS) return (jint)nbytes; - else + else { + if (APR_STATUS_IS_EAGAIN(ss)) + ss = TCN_EAGAIN; return -(jint)ss; + } } TCN_IMPLEMENT_CALL(jint, Socket, recvt)(TCN_STDARGS, jlong sock, @@ -428,8 +443,11 @@ nbytes ? 0 : JNI_ABORT); if (ss == APR_SUCCESS) return (jint)nbytes; - else + else { + if (APR_STATUS_IS_EAGAIN(ss)) + ss = TCN_EAGAIN; return -(jint)ss; + } } TCN_IMPLEMENT_CALL(jint, Socket, recvb)(TCN_STDARGS, jlong sock, @@ -449,8 +467,11 @@ if (ss == APR_SUCCESS) return (jint)nbytes; - else + else { + if (APR_STATUS_IS_EAGAIN(ss)) + ss = TCN_EAGAIN; return -(jint)ss; + } } TCN_IMPLEMENT_CALL(jint, Socket, recvbt)(TCN_STDARGS, jlong sock, @@ -479,8 +500,11 @@ if (ss == APR_SUCCESS) return (jint)nbytes; - else + else { + if (APR_STATUS_IS_EAGAIN(ss)) + ss = TCN_EAGAIN; return -(jint)ss; + } } TCN_IMPLEMENT_CALL(jint, Socket, recvfrom)(TCN_STDARGS, jlong from, @@ -502,8 +526,11 @@ nbytes ? 0 : JNI_ABORT); if (ss == APR_SUCCESS) return (jint)nbytes; - else + else { + if (APR_STATUS_IS_EAGAIN(ss)) + ss = TCN_EAGAIN; return -(jint)ss; + } } TCN_IMPLEMENT_CALL(jint, Socket, optSet)(TCN_STDARGS, jlong sock, @@ -628,8 +655,11 @@ */ if (ss == APR_SUCCESS) return (jlong)written; - else + else { + if (APR_STATUS_IS_EAGAIN(ss)) + ss = TCN_EAGAIN; return -(jlong)ss; + } } TCN_IMPLEMENT_CALL(jint, Socket, acceptfilter)(TCN_STDARGS, 1.17 +6 -2 jakarta-tomcat-connectors/jni/native/src/poll.c Index: poll.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/poll.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- poll.c 9 Jun 2005 10:29:43 -0000 1.16 +++ poll.c 9 Jun 2005 11:13:40 -0000 1.17 @@ -250,8 +250,12 @@ p->sp_poll++; #endif if ((rv = apr_pollset_poll(p->pollset, J2T(timeout), &num, &fd)) != APR_SUCCESS) { -#ifdef TCN_DO_STATISTICS if (APR_STATUS_IS_TIMEUP(rv)) + rv = TCN_TIMEUP; + else if (APR_STATUS_IS_EAGAIN(rv)) + rv = TCN_EAGAIN; +#ifdef TCN_DO_STATISTICS + if (rv == TCN_TIMEUP) p->sp_poll_timeout++; else p->sp_err_poll++;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]