This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/master by this push:
     new 40ca9be  Fix timeout handling. Write timeout could be handled as read 
timeout.
40ca9be is described below

commit 40ca9bef10a2c2db48e759b16fc4fbff3725ffca
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Sat Nov 16 16:43:52 2019 +0000

    Fix timeout handling. Write timeout could be handled as read timeout.
---
 java/org/apache/tomcat/util/net/NioEndpoint.java | 15 ++++++++-------
 webapps/docs/changelog.xml                       |  4 ++++
 2 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/java/org/apache/tomcat/util/net/NioEndpoint.java 
b/java/org/apache/tomcat/util/net/NioEndpoint.java
index 1e5b900..090b26a 100644
--- a/java/org/apache/tomcat/util/net/NioEndpoint.java
+++ b/java/org/apache/tomcat/util/net/NioEndpoint.java
@@ -953,24 +953,25 @@ public class NioEndpoint extends 
AbstractJsseEndpoint<NioChannel,SocketChannel>
                             cancelledKey(key, socketWrapper);
                         } else if ((socketWrapper.interestOps() & 
SelectionKey.OP_READ) == SelectionKey.OP_READ ||
                                   (socketWrapper.interestOps() & 
SelectionKey.OP_WRITE) == SelectionKey.OP_WRITE) {
-                            boolean isTimedOut = false;
                             boolean readTimeout = false;
                             boolean writeTimeout = false;
                             // Check for read timeout
                             if ((socketWrapper.interestOps() & 
SelectionKey.OP_READ) == SelectionKey.OP_READ) {
                                 long delta = now - socketWrapper.getLastRead();
                                 long timeout = socketWrapper.getReadTimeout();
-                                isTimedOut = timeout > 0 && delta > timeout;
-                                readTimeout = true;
+                                if (timeout > 0 && delta > timeout) {
+                                    readTimeout = true;
+                                }
                             }
                             // Check for write timeout
-                            if (!isTimedOut && (socketWrapper.interestOps() & 
SelectionKey.OP_WRITE) == SelectionKey.OP_WRITE) {
+                            if (!readTimeout && (socketWrapper.interestOps() & 
SelectionKey.OP_WRITE) == SelectionKey.OP_WRITE) {
                                 long delta = now - 
socketWrapper.getLastWrite();
                                 long timeout = socketWrapper.getWriteTimeout();
-                                isTimedOut = timeout > 0 && delta > timeout;
-                                writeTimeout = true;
+                                if (timeout > 0 && delta > timeout) {
+                                    writeTimeout = true;
+                                }
                             }
-                            if (isTimedOut) {
+                            if (readTimeout || writeTimeout) {
                                 key.interestOps(0);
                                 // Avoid duplicate timeout calls
                                 socketWrapper.interestOps(0);
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index c209d6e..c60f634 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -57,6 +57,10 @@
       <add>
         <bug>63835</bug>: Add support for Keep-Alive response header. 
(michaelo)
       </add>
+      <fix>
+        Correct a logic bug in the <code>NioEndpoint</code> timeout handling
+        that meant a write timeout could be handled as a read timeout. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Web applications">


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to