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 <john...@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) {

Reply via email to