diff -r ea044aedc2b6 -r 455612b3161a src/java.base/share/classes/sun/nio/ch/SelectionKeyImpl.java --- a/src/java.base/share/classes/sun/nio/ch/SelectionKeyImpl.java Wed Nov 20 09:12:07 2019 +0100 +++ b/src/java.base/share/classes/sun/nio/ch/SelectionKeyImpl.java Wed Nov 20 08:35:53 2019 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2019, 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 @@ -58,6 +58,9 @@ // registered events in kernel, used by some Selector implementations private int registeredEvents; + // registered events need to be reset, used by some Selector implementations + private volatile boolean reset; + // index of key in pollfd array, used by some Selector implementations private int index; @@ -184,6 +187,26 @@ index = i; } + /** + * Sets the reset flag, re-queues the key, and wakeups up the Selector + */ + void reset() { + reset = true; + selector.setEventOps(this); + selector.wakeup(); + } + + /** + * Clears the reset flag, returning the previous value of the flag + */ + boolean getAndClearReset() { + assert Thread.holdsLock(selector); + boolean r = reset; + if (r) + reset = false; + return r; + } + @Override public String toString() { StringBuilder sb = new StringBuilder();