Author: mturk Date: Thu Apr 6 06:38:26 2006 New Revision: 391984 URL: http://svn.apache.org/viewcvs?rev=391984&view=rev Log: Check for EINTR inside poll call. This will lower the number of JNI calls in case EINTR is signaled.
Modified: tomcat/connectors/trunk/jni/native/src/poll.c Modified: tomcat/connectors/trunk/jni/native/src/poll.c URL: http://svn.apache.org/viewcvs/tomcat/connectors/trunk/jni/native/src/poll.c?rev=391984&r1=391983&r2=391984&view=diff ============================================================================== --- tomcat/connectors/trunk/jni/native/src/poll.c (original) +++ tomcat/connectors/trunk/jni/native/src/poll.c Thu Apr 6 06:38:26 2006 @@ -55,6 +55,7 @@ int sp_poll_timeout; int sp_overflow; int sp_equals; + int sp_eintr; #endif } tcn_pollset_t; @@ -75,6 +76,7 @@ fprintf(stderr, "Maintained : %d\n", p->sp_maintained); fprintf(stderr, "Max. maintained : %d\n", p->sp_max_maintained); fprintf(stderr, "Number of duplicates : %d\n", p->sp_equals); + fprintf(stderr, "Number of interrupts : %d\n", p->sp_eintr); } @@ -249,15 +251,25 @@ #ifdef TCN_DO_STATISTICS p->sp_poll++; #endif - if ((rv = apr_pollset_poll(p->pollset, J2T(timeout), &num, &fd)) != APR_SUCCESS) { - TCN_ERROR_WRAP(rv); + for (;;) { + rv = apr_pollset_poll(p->pollset, J2T(timeout), &num, &fd); + if (rv != APR_SUCCESS) { + if (APR_STATUS_IS_EINTR(rv)) { #ifdef TCN_DO_STATISTICS - if (rv == TCN_TIMEUP) - p->sp_poll_timeout++; - else - p->sp_err_poll++; + p->sp_eintr++; #endif - num = (apr_int32_t)(-rv); + continue; + } + TCN_ERROR_WRAP(rv); +#ifdef TCN_DO_STATISTICS + if (rv == TCN_TIMEUP) + p->sp_poll_timeout++; + else + p->sp_err_poll++; +#endif + num = (apr_int32_t)(-rv); + } + break; } if (num > 0) { #ifdef TCN_DO_STATISTICS --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]