Bug in sun.nio.ch.SolarisEventPort#port_dissociate

Alan Bateman Alan.Bateman at oracle.com
Wed Jun 14 14:29:38 UTC 2017

On 14/06/2017 14:35, David M. Lloyd wrote:
> There's a bug in sun.nio.ch.SolarisEventPort#port_dissociate which 
> manifests as an IOException like this:
> Exception in thread "default I/O-30" java.lang.InternalError: 
> java.io.IOException: File descriptor in bad state
>     at sun.nio.ch.EventPortWrapper.release(EventPortWrapper.java:235)
>     at 
> sun.nio.ch.EventPortSelectorImpl.implDereg(EventPortSelectorImpl.java:144)
>     at 
> sun.nio.ch.SelectorImpl.processDeregisterQueue(SelectorImpl.java:149)
>     at 
> sun.nio.ch.EventPortSelectorImpl.doSelect(EventPortSelectorImpl.java:75)
>     at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
>     at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
>     at org.xnio.nio.WorkerThread.run(WorkerThread.java:528)
> Caused by: java.io.IOException: File descriptor in bad state
>     at sun.nio.ch.SolarisEventPort.port_dissociate(Native Method)
>     at sun.nio.ch.EventPortWrapper.release(EventPortWrapper.java:233)
>     ... 6 more
> The problem was observed in:
> java version "1.8.0_121"
> Solaris versions 10 and 11
> But I think it also exists in 9.  The problem appears to be that the 
> Java_sun_nio_ch_SolarisEventPort_port_1dissociate function in 
> SolarisEventPort.c is checking for ENOENT but not EBADFD.  I'm not 
> sure if the ENOENT check is needed (the associate variant does not 
> check for it even though it's specified to be a possible return), but 
> empirically I conclude that the EBADFD check is.
The timing here is a good as I think the JDK should move to using the 
port based Selector as the default on Solaris (it still uses the 
/dev/poll based Selector by default). Maybe JDK 10 is the right thing to 
attempt this switch.

Can you say anything on when this happens? Can you distill it down to a 
small test case?


More information about the nio-dev mailing list