You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by jo...@apache.org on 2019/05/04 17:05:33 UTC

[mina] branch 2.1.X updated: Performance improvement of UDP processing for DIRMINA-1095

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

johnnyv pushed a commit to branch 2.1.X
in repository https://gitbox.apache.org/repos/asf/mina.git


The following commit(s) were added to refs/heads/2.1.X by this push:
     new 60b4190  Performance improvement of UDP processing for DIRMINA-1095
60b4190 is described below

commit 60b4190162bddc13d35df95a550b079254bfba83
Author: johnnyv <jo...@apache.org>
AuthorDate: Sat May 4 13:05:29 2019 -0400

    Performance improvement of UDP processing for DIRMINA-1095
---
 .../transport/socket/nio/NioDatagramAcceptor.java  | 49 ++++++++++++----------
 1 file changed, 28 insertions(+), 21 deletions(-)

diff --git a/mina-core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramAcceptor.java b/mina-core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramAcceptor.java
index 420c970..a2f7420 100644
--- a/mina-core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramAcceptor.java
+++ b/mina-core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramAcceptor.java
@@ -258,27 +258,34 @@ public final class NioDatagramAcceptor extends AbstractIoAcceptor implements Dat
     }
 
     private void processReadySessions(Set<SelectionKey> handles) {
-        Iterator<SelectionKey> iterator = handles.iterator();
-
-        while (iterator.hasNext()) {
-            SelectionKey key = iterator.next();
-            DatagramChannel handle = (DatagramChannel) key.channel();
-            iterator.remove();
-
-            try {
-                if (key.isValid() && key.isReadable()) {
-                    readHandle(handle);
-                }
-
-                if (key.isValid() && key.isWritable()) {
-                    for (IoSession session : getManagedSessions().values()) {
-                        scheduleFlush((NioSession) session);
-                    }
-                }
-            } catch (Exception e) {
-                ExceptionMonitor.getInstance().exceptionCaught(e);
-            }
-        }
+	final Iterator<SelectionKey> iterator = handles.iterator();
+
+	while (iterator.hasNext()) {
+	    try {
+		final SelectionKey key = iterator.next();
+		final DatagramChannel handle = (DatagramChannel) key.channel();
+
+		if (key.isValid()) {
+		    if (key.isReadable()) {
+			readHandle(handle);
+		    }
+
+		    if (key.isWritable()) {
+			for (IoSession session : getManagedSessions().values()) {
+			    final NioSession x = (NioSession) session;
+			    if (x.getChannel() == handle) {
+				scheduleFlush(x);
+			    }
+			}
+		    }
+		}
+
+	    } catch (Exception e) {
+		ExceptionMonitor.getInstance().exceptionCaught(e);
+	    } finally {
+		iterator.remove();
+	    }
+	}
     }
 
     private boolean scheduleFlush(NioSession session) {