Author: markt
Date: Tue Jul 23 14:21:38 2013
New Revision: 1506053
URL: http://svn.apache.org/r1506053
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=55267
Separate read and write timeout for NIO and ensure that the write timeout is
always the connection timeout configured in the connector. This prevents long
Comet timeouts (which are intended for read operations) being used for writes
which - particularly in error conditions - can cause long delays.
Since only NIO supports comet timeouts this change is only required in NIO.
Modified:
tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java
tomcat/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java
tomcat/trunk/java/org/apache/coyote/http11/upgrade/NioServletOutputStream.java
tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java?rev=1506053&r1=1506052&r2=1506053&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java Tue Jul 23
14:21:38 2013
@@ -283,7 +283,7 @@ public class AjpNioProcessor extends Abs
writeBuffer.flip();
- long writeTimeout = att.getTimeout();
+ long writeTimeout = att.getWriteTimeout();
Selector selector = null;
try {
selector = pool.get();
Modified:
tomcat/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java?rev=1506053&r1=1506052&r2=1506053&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java Tue
Jul 23 14:21:38 2013
@@ -119,7 +119,7 @@ public class InternalNioOutputBuffer ext
int written = 0;
NioEndpoint.KeyAttachment att =
(NioEndpoint.KeyAttachment)socket.getAttachment(false);
if ( att == null ) throw new IOException("Key must be cancelled");
- long writeTimeout = att.getTimeout();
+ long writeTimeout = att.getWriteTimeout();
Selector selector = null;
try {
selector = pool.get();
Modified:
tomcat/trunk/java/org/apache/coyote/http11/upgrade/NioServletOutputStream.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/NioServletOutputStream.java?rev=1506053&r1=1506052&r2=1506053&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/coyote/http11/upgrade/NioServletOutputStream.java
(original)
+++
tomcat/trunk/java/org/apache/coyote/http11/upgrade/NioServletOutputStream.java
Tue Jul 23 14:21:38 2013
@@ -81,7 +81,7 @@ public class NioServletOutputStream exte
if (att == null) {
throw new IOException("Key must be cancelled");
}
- long writeTimeout = att.getTimeout();
+ long writeTimeout = att.getWriteTimeout();
Selector selector = null;
try {
selector = pool.get();
@@ -110,7 +110,7 @@ public class NioServletOutputStream exte
if (att == null) {
throw new IOException("Key must be cancelled");
}
- long writeTimeout = att.getTimeout();
+ long writeTimeout = att.getWriteTimeout();
Selector selector = null;
try {
selector = pool.get();
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=1506053&r1=1506052&r2=1506053&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Tue Jul 23
14:21:38 2013
@@ -1381,6 +1381,7 @@ public class NioEndpoint extends Abstrac
lastAccess = System.currentTimeMillis();
setComet(false);
setTimeout(soTimeout);
+ setWriteTimeout(soTimeout);
error = false;
sendfileData = null;
if (readLatch != null) {
@@ -1450,12 +1451,18 @@ public class NioEndpoint extends Abstrac
public void setSendfileData(SendfileData sf) { this.sendfileData = sf;}
public SendfileData getSendfileData() { return this.sendfileData;}
+ public void setWriteTimeout(long writeTimeout) {
+ this.writeTimeout = writeTimeout;
+ }
+ public long getWriteTimeout() {return this.writeTimeout;}
+
private Poller poller = null;
private int interestOps = 0;
private boolean cometNotify = false;
private CountDownLatch readLatch = null;
private CountDownLatch writeLatch = null;
private SendfileData sendfileData = null;
+ private long writeTimeout = -1;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]