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]