< prev index next >
src/java.base/solaris/classes/sun/nio/ch/EventPortSelectorImpl.java
Print this page
rev 49242 : [mq]: selector-cleanup
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
@@ -40,18 +40,18 @@
extends SelectorImpl
{
private final EventPortWrapper pollWrapper;
// Maps from file descriptors to keys
- private Map<Integer,SelectionKeyImpl> fdToKey;
+ private final Map<Integer, SelectionKeyImpl> fdToKey;
// True if this Selector has been closed
- private boolean closed = false;
+ private boolean closed;
// Lock for interrupt triggering and clearing
private final Object interruptLock = new Object();
- private boolean interruptTriggered = false;
+ private boolean interruptTriggered;
/**
* Package private constructor called by factory method in
* the abstract superclass Selector.
*/
@@ -59,13 +59,18 @@
super(sp);
pollWrapper = new EventPortWrapper();
fdToKey = new HashMap<>();
}
- protected int doSelect(long timeout) throws IOException {
+ private void ensureOpen() {
if (closed)
throw new ClosedSelectorException();
+ }
+
+ @Override
+ protected int doSelect(long timeout) throws IOException {
+ ensureOpen();
processDeregisterQueue();
int entries;
try {
begin();
entries = pollWrapper.poll(timeout);
@@ -103,10 +108,11 @@
}
}
return numKeysUpdated;
}
+ @Override
protected void implClose() throws IOException {
if (closed)
return;
closed = true;
@@ -114,11 +120,10 @@
synchronized (interruptLock) {
interruptTriggered = true;
}
pollWrapper.close();
- selectedKeys = null;
// Deregister channels
Iterator<SelectionKey> i = keys.iterator();
while (i.hasNext()) {
SelectionKeyImpl ski = (SelectionKeyImpl)i.next();
@@ -128,16 +133,18 @@
((SelChImpl)selch).kill();
i.remove();
}
}
+ @Override
protected void implRegister(SelectionKeyImpl ski) {
int fd = IOUtil.fdVal(ski.channel.getFD());
fdToKey.put(Integer.valueOf(fd), ski);
keys.add(ski);
}
+ @Override
protected void implDereg(SelectionKeyImpl ski) throws IOException {
int i = ski.getIndex();
assert (i >= 0);
int fd = ski.channel.getFDVal();
fdToKey.remove(Integer.valueOf(fd));
@@ -149,17 +156,18 @@
SelectableChannel selch = ski.channel();
if (!selch.isOpen() && !selch.isRegistered())
((SelChImpl)selch).kill();
}
+ @Override
public void putEventOps(SelectionKeyImpl sk, int ops) {
- if (closed)
- throw new ClosedSelectorException();
+ ensureOpen();
int fd = sk.channel.getFDVal();
pollWrapper.setInterest(fd, ops);
}
+ @Override
public Selector wakeup() {
synchronized (interruptLock) {
if (!interruptTriggered) {
pollWrapper.interrupt();
interruptTriggered = true;
< prev index next >