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 <[email protected]>
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) {