Author: markt
Date: Thu Aug 22 10:05:47 2013
New Revision: 1516405
URL: http://svn.apache.org/r1516405
Log:
Fix an issue highlighted when running the Autobahn test suite on Linux.
Don't register the socket for a read when a write event completes (may lead to
thread starvation)
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1432867
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java?rev=1516405&r1=1516404&r2=1516405&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java Thu Aug
22 10:05:47 2013
@@ -661,7 +661,14 @@ public abstract class AbstractProtocol i
} else if (state == SocketState.UPGRADED) {
// Need to keep the connection associated with the
processor
connections.put(socket, processor);
- longPoll(wrapper, processor);
+ // Don't add sockets back to the poller if this was a
+ // non-blocking write otherwise the poller may trigger
+ // multiple read events which may lead to thread starvation
+ // in the connector. The write() method will add this this
+ // socket to the poller if necessary.
+ if (status != SocketStatus.OPEN_WRITE) {
+ longPoll(wrapper, processor);
+ }
} else {
// Connection closed. OK to recycle the processor. Upgrade
// processors are not recycled.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]