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

alexpl pushed a commit to branch ignite-2.9
in repository https://gitbox.apache.org/repos/asf/ignite.git

commit 532fec77dabce38d4c336f5a3a924b468e3494d7
Author: Mikhail Petrov <[email protected]>
AuthorDate: Tue Sep 8 11:31:09 2020 +0300

    IGNITE-13361 Fix hang of sending communication messages - Fixes #8180.
    
    Signed-off-by: Aleksey Plekhanov <[email protected]>
    (cherry picked from commit db3aad1cc2e0be8352c2e5ba3351d4c839e5f38f)
---
 .../org/apache/ignite/internal/util/nio/GridNioServer.java | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
index 91ddb42..7faeeda 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
@@ -726,6 +726,8 @@ public class GridNioServer<T> {
 
             ses0.resend(futs);
 
+            ses0.procWrite.set(true);
+
             // Wake up worker.
             ses0.offerStateChange((GridNioServer.SessionChangeRequest)fut0);
         }
@@ -1087,11 +1089,15 @@ public class GridNioServer<T> {
      * Stop polling for write availability if write queue is empty.
      */
     private void stopPollingForWrite(SelectionKey key, 
GridSelectorNioSessionImpl ses) {
-        if (ses.writeQueue().isEmpty()) {
+        if (ses.procWrite.get()) {
             ses.procWrite.set(false);
 
-            if ((key.interestOps() & SelectionKey.OP_WRITE) != 0)
-                key.interestOps(key.interestOps() & (~SelectionKey.OP_WRITE));
+            if (ses.writeQueue().isEmpty()) {
+                if ((key.interestOps() & SelectionKey.OP_WRITE) != 0)
+                    key.interestOps(key.interestOps() & 
(~SelectionKey.OP_WRITE));
+            }
+            else
+                ses.procWrite.set(true);
         }
     }
 
@@ -2289,7 +2295,7 @@ public class GridNioServer<T> {
             SelectionKey key = ses.key();
 
             if (key.isValid()) {
-                if ((key.interestOps() & SelectionKey.OP_WRITE) == 0)
+                if (ses.procWrite.get() && (key.interestOps() & 
SelectionKey.OP_WRITE) == 0)
                     key.interestOps(key.interestOps() | SelectionKey.OP_WRITE);
 
                 // Update timestamp to protected against false write timeout.

Reply via email to