src/java.base/share/classes/sun/nio/ch/SelectionKeyImpl.java
changeset 49493 814bd31f8da0
parent 49290 07779973cbe2
child 49526 cad4c844902a
--- a/src/java.base/share/classes/sun/nio/ch/SelectionKeyImpl.java	Thu Mar 29 22:12:05 2018 -0700
+++ b/src/java.base/share/classes/sun/nio/ch/SelectionKeyImpl.java	Fri Mar 30 08:28:09 2018 +0100
@@ -39,21 +39,28 @@
 public final class SelectionKeyImpl
     extends AbstractSelectionKey
 {
-
     final SelChImpl channel;                            // package-private
-    public final SelectorImpl selector;
-
-    // Index for a pollfd array in Selector that this key is registered with
-    private int index;
+    private final SelectorImpl selector;
 
     private volatile int interestOps;
     private volatile int readyOps;
 
+    // registered events in kernel, used by some Selector implementations
+    private int registeredEvents;
+
+    // index of key in pollfd array, used by some Selector implementations
+    private int index;
+
     SelectionKeyImpl(SelChImpl ch, SelectorImpl sel) {
         channel = ch;
         selector = sel;
     }
 
+    private void ensureValid() {
+        if (!isValid())
+            throw new CancelledKeyException();
+    }
+
     @Override
     public SelectableChannel channel() {
         return (SelectableChannel)channel;
@@ -61,20 +68,7 @@
 
     @Override
     public Selector selector() {
-        return (Selector)selector;
-    }
-
-    int getIndex() {                                    // package-private
-        return index;
-    }
-
-    void setIndex(int i) {                              // package-private
-        index = i;
-    }
-
-    private void ensureValid() {
-        if (!isValid())
-            throw new CancelledKeyException();
+        return selector;
     }
 
     @Override
@@ -109,7 +103,7 @@
     public SelectionKey nioInterestOps(int ops) {
         if ((ops & ~channel().validOps()) != 0)
             throw new IllegalArgumentException();
-        channel.translateAndSetInterestOps(ops, this);
+        selector.putEventOps(this, channel.translateInterestOps(ops));
         interestOps = ops;
         return this;
     }
@@ -118,6 +112,24 @@
         return interestOps;
     }
 
+    void registeredEvents(int events) {
+        // assert Thread.holdsLock(selector);
+        this.registeredEvents = events;
+    }
+
+    int registeredEvents() {
+        // assert Thread.holdsLock(selector);
+        return registeredEvents;
+    }
+
+    int getIndex() {
+        return index;
+    }
+
+    void setIndex(int i) {
+        index = i;
+    }
+
     @Override
     public String toString() {
         StringBuilder sb = new StringBuilder();