src/java.base/unix/classes/sun/nio/ch/PollSelectorImpl.java
changeset 49526 cad4c844902a
parent 49493 814bd31f8da0
child 49527 5aa40f834b50
--- a/src/java.base/unix/classes/sun/nio/ch/PollSelectorImpl.java	Thu Apr 05 09:55:16 2018 +0200
+++ b/src/java.base/unix/classes/sun/nio/ch/PollSelectorImpl.java	Thu Apr 05 15:01:57 2018 +0100
@@ -60,7 +60,6 @@
     // pending updates, queued by putEventOps
     private final Object updateLock = new Object();
     private final Deque<SelectionKeyImpl> updateKeys = new ArrayDeque<>();
-    private final Deque<Integer> updateEvents = new ArrayDeque<>();
 
     // interrupt triggering and clearing
     private final Object interruptLock = new Object();
@@ -136,10 +135,9 @@
         assert Thread.holdsLock(this);
 
         synchronized (updateLock) {
-            assert updateKeys.size() == updateEvents.size();
             SelectionKeyImpl ski;
             while ((ski = updateKeys.pollFirst()) != null) {
-                int newEvents = updateEvents.pollFirst();
+                int newEvents = ski.translateInterestOps();
                 if (ski.isValid()) {
                     int index = ski.getIndex();
                     assert index >= 0 && index < pollArraySize;
@@ -173,14 +171,14 @@
             int rOps = getReventOps(i);
             if (rOps != 0) {
                 SelectionKeyImpl ski = pollKeys.get(i);
-                assert ski.channel.getFDVal() == getDescriptor(i);
+                assert ski.getFDVal() == getDescriptor(i);
                 if (ski.isValid()) {
                     if (selectedKeys.contains(ski)) {
-                        if (ski.channel.translateAndSetReadyOps(rOps, ski)) {
+                        if (ski.translateAndSetReadyOps(rOps)) {
                             numKeysUpdated++;
                         }
                     } else {
-                        ski.channel.translateAndSetReadyOps(rOps, ski);
+                        ski.translateAndSetReadyOps(rOps);
                         if ((ski.nioReadyOps() & ski.nioInterestOps()) != 0) {
                             selectedKeys.add(ski);
                             numKeysUpdated++;
@@ -233,10 +231,9 @@
     }
 
     @Override
-    public void putEventOps(SelectionKeyImpl ski, int events) {
+    public void setEventOps(SelectionKeyImpl ski) {
         ensureOpen();
         synchronized (updateLock) {
-            updateEvents.addLast(events);  // events first in case adding key fails
             updateKeys.addLast(ski);
         }
     }
@@ -285,7 +282,7 @@
 
         int index = pollArraySize;
         assert index > 0;
-        putDescriptor(index, ski.channel.getFDVal());
+        putDescriptor(index, ski.getFDVal());
         putEventOps(index, ops);
         putReventOps(index, 0);
         ski.setIndex(index);
@@ -301,7 +298,7 @@
     private void update(SelectionKeyImpl ski, int ops) {
         int index = ski.getIndex();
         assert index > 0 && index < pollArraySize;
-        assert getDescriptor(index) == ski.channel.getFDVal();
+        assert getDescriptor(index) == ski.getFDVal();
         putEventOps(index, ops);
     }
 
@@ -311,7 +308,7 @@
     private void remove(SelectionKeyImpl ski) {
         int index = ski.getIndex();
         assert index > 0 && index < pollArraySize;
-        assert getDescriptor(index) == ski.channel.getFDVal();
+        assert getDescriptor(index) == ski.getFDVal();
 
         // replace pollfd at index with the last pollfd in array
         int lastIndex = pollArraySize - 1;
@@ -321,7 +318,7 @@
             int lastFd = getDescriptor(lastIndex);
             int lastOps = getEventOps(lastIndex);
             int lastRevents = getReventOps(lastIndex);
-            assert lastKey.channel.getFDVal() == lastFd;
+            assert lastKey.getFDVal() == lastFd;
             putDescriptor(index, lastFd);
             putEventOps(index, lastOps);
             putReventOps(index, lastRevents);