--- 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();