DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUGĀ· RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://issues.apache.org/bugzilla/show_bug.cgi?id=40525>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED ANDĀ· INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=40525 Summary: Native library causes 100% cpu use when idle Product: Tomcat 5 Version: 5.5.17 Platform: PC OS/Version: Windows 2000 Status: NEW Keywords: PatchAvailable Severity: normal Priority: P3 Component: Native:JK AssignedTo: tomcat-dev@jakarta.apache.org ReportedBy: [EMAIL PROTECTED] The jni native method poll() in poll.c does not check if the socket has no timeout (i.e. it does not check if max_ttl is negative) before adjusting the timeout passed to apr_pollset_poll(). The timeout passed to apr_pollset_poll() is in the variable 'ptime'. The current code sets ptime to zero when there is a valid timeout (usually 2000ms) and no socket timeout (usually -1000). These values are common because AprEndpoint.java defaults to pollTime=2000 ms and soTimeout=-1 sec (which gets adjusted to -1000 ms). When a zero timeout is passed to apr_pollset_poll(), it is passed along to the native select() as a zero timeval which causes select() to return immediately instead of blocking. A negative value should be passed to apr_pollset_poll() for an infinite timeout, but I don't think that's what we want here. The observed result is 100% cpu use when Tomcat is idle because calls to poll() are made continuously. These calls return immediately. The solution is to recognize when max_ttl is negative, and if so; do not use it to adjust the 'ptime' variable passed as an argument to poll(). Here is a patch for http://svn.apache.org/repos/asf/tomcat/connectors/trunk/. Index: jni/native/src/poll.c =================================================================== --- jni/native/src/poll.c (revision 446772) +++ jni/native/src/poll.c (working copy) @@ -263,7 +263,7 @@ /* Find the minimum timeout */ for (i = 0; i < p->nelts; i++) { apr_interval_time_t t = now - p->socket_ttl[i]; - if (t >= p->max_ttl) { + if (p->max_ttl > 0 && t >= p->max_ttl) { ptime = 0; break; } -- Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]