--- old/src/java.base/solaris/classes/sun/nio/ch/EventPortSelectorImpl.java 2018-03-14 18:37:55.000000000 +0000 +++ new/src/java.base/solaris/classes/sun/nio/ch/EventPortSelectorImpl.java 2018-03-14 18:37:55.000000000 +0000 @@ -1,5 +1,5 @@ /* - * 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 @@ -42,14 +42,14 @@ private final EventPortWrapper pollWrapper; // Maps from file descriptors to keys - private Map fdToKey; + private final Map 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 @@ -61,9 +61,14 @@ 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 { @@ -105,6 +110,7 @@ return numKeysUpdated; } + @Override protected void implClose() throws IOException { if (closed) return; @@ -116,7 +122,6 @@ } pollWrapper.close(); - selectedKeys = null; // Deregister channels Iterator i = keys.iterator(); @@ -130,12 +135,14 @@ } } + @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); @@ -151,13 +158,14 @@ ((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) {