Author: kkolinko Date: Mon Jun 7 04:34:08 2010 New Revision: 952090 URL: http://svn.apache.org/viewvc?rev=952090&view=rev Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=49095 AprEndpoint does not wakeup accepts with deferred accept or BSD filters Based on a patch provided by Ruediger Pluem
Modified: tomcat/tc6.0.x/trunk/STATUS.txt tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Modified: tomcat/tc6.0.x/trunk/STATUS.txt URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/STATUS.txt?rev=952090&r1=952089&r2=952090&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/STATUS.txt (original) +++ tomcat/tc6.0.x/trunk/STATUS.txt Mon Jun 7 04:34:08 2010 @@ -140,13 +140,6 @@ PATCHES PROPOSED TO BACKPORT: +1: kkolinko, markt, rjung -1: -* Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=49095 - AprEndpoint does not wakeup accepts with deferred accept or BSD filters - Based on a patch provided by Ruediger Pluem - https://issues.apache.org/bugzilla/attachment.cgi?id=25510 - +1: kkolinko, rjung, markt - -1: - * Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=49343 When ChannelException is thrown, remove listener from channel. http://svn.apache.org/viewvc?view=revision&revision=948402 Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=952090&r1=952089&r2=952090&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Mon Jun 7 04:34:08 2010 @@ -17,6 +17,7 @@ package org.apache.tomcat.util.net; +import java.io.OutputStreamWriter; import java.net.InetAddress; import java.net.InetSocketAddress; import java.util.ArrayList; @@ -906,6 +907,19 @@ public class AprEndpoint { log.debug("About to unlock socket for: " + saddr); } s.connect(saddr, unlockTimeout); + /* + * In the case of a deferred accept / accept filters we need to + * send data to wake up the accept. Send OPTIONS * to bypass even + * BSD accept filters. The Acceptor will discard it. + */ + if (deferAccept) { + OutputStreamWriter sw; + + sw = new OutputStreamWriter(s.getOutputStream(), "ISO-8859-1"); + sw.write("OPTIONS * HTTP/1.0\r\n" + + "User-Agent: Tomcat wakeup connection\r\n\r\n"); + sw.flush(); + } } catch(Exception e) { if (log.isDebugEnabled()) { log.debug(sm.getString("endpoint.debug.unlock", "" + port), e); @@ -1153,6 +1167,15 @@ public class AprEndpoint { try { // Accept the next incoming connection from the server socket long socket = Socket.accept(serverSock); + /* + * In the case of a deferred accept unlockAccept needs to + * send data. This data will be rubbish, so destroy the + * socket and don't process it. + */ + if (deferAccept && (paused || !running)) { + Socket.destroy(socket); + continue; + } // Hand this socket off to an appropriate processor if (!processSocketWithOptions(socket)) { // Close socket and pool right away Modified: tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml?rev=952090&r1=952089&r2=952090&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Mon Jun 7 04:34:08 2010 @@ -166,6 +166,11 @@ <bug>48917</bug>: Correct name of mod_jk module in ApacheConfig. Patch provided by Todd Hicks. (markt) </fix> + <fix> + <bug>49095</bug>: AprEndpoint did not wakeup acceptors during shutdown + when deferAccept option was enabled. Based on a patch provided by + Ruediger Pluem. (kkolinko) + </fix> <add> Use chunked encoding for http 1.1 requests with no content-length (regardless of keep-alive) so client can differentiate between complete --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org