-
Bug
-
Resolution: Fixed
-
P4
-
9, 10
-
b07
One of our internal tests is failing in timeout. The Thread Dump shows the following two threads:
"MainThread" #12 prio=5 os_prio=64 tid=0x00000000009b0800 nid=0x20 in Object.wait() [0xffff80ff9e2fc000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(java.base@9-ea/Native Method)
- waiting on <0x00000000ff8f3708> (a java.lang.Thread)
at java.lang.Thread.join(java.base@9-ea/Thread.java:1353)
- waiting to re-lock in wait() <0x00000000ff8f3708> (a java.lang.Thread)
at java.lang.Thread.join(java.base@9-ea/Thread.java:1427)
at sun.net.httpserver.ServerImpl.stop(jdk.httpserver@9-ea/ServerImpl.java:211)
at sun.net.httpserver.HttpsServerImpl.stop(jdk.httpserver@9-ea/HttpsServerImpl.java:78)
at TestServer.stop(TestServer.java:237)
"HTTP-Dispatcher" #39 prio=5 os_prio=64 tid=0x00000000017d8800 nid=0x3a runnable [0xffff80ff9dd7d000]
java.lang.Thread.State: RUNNABLE
at sun.net.httpserver.LeftOverInputStream.drain(jdk.httpserver@9-ea/LeftOverInputStream.java:119)
at sun.net.httpserver.LeftOverInputStream.close(jdk.httpserver@9-ea/LeftOverInputStream.java:69)
at sun.net.httpserver.ExchangeImpl.close(jdk.httpserver@9-ea/ExchangeImpl.java:146)
at sun.net.httpserver.HttpsExchangeImpl.close(jdk.httpserver@9-ea/HttpsExchangeImpl.java:66)
at TestServer$HttpHandler.handle(TestServer.java:574)
at com.sun.net.httpserver.Filter$Chain.doFilter(jdk.httpserver@9-ea/Filter.java:77)
at sun.net.httpserver.AuthFilter.doFilter(jdk.httpserver@9-ea/AuthFilter.java:82)
at com.sun.net.httpserver.Filter$Chain.doFilter(jdk.httpserver@9-ea/Filter.java:80)
at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(jdk.httpserver@9-ea/ServerImpl.java:685)
at com.sun.net.httpserver.Filter$Chain.doFilter(jdk.httpserver@9-ea/Filter.java:77)
at sun.net.httpserver.ServerImpl$Exchange.run(jdk.httpserver@9-ea/ServerImpl.java:655)
at sun.net.httpserver.ServerImpl$DefaultExecutor.execute(jdk.httpserver@9-ea/ServerImpl.java:159)
at sun.net.httpserver.ServerImpl$Dispatcher.handle(jdk.httpserver@9-ea/ServerImpl.java:440)
at sun.net.httpserver.ServerImpl$Dispatcher.run(jdk.httpserver@9-ea/ServerImpl.java:405)
at java.lang.Thread.run(java.base@9-ea/Thread.java:844)
It appears that the MainThread is attempting to stop the server (end of the main) which causes the ServerImpl to attempt to join() the HTTP-Dispatcher thread. However, that thread appears to be spinning in LeftOverInputStream.drain().
There is probably some subtle race condition here as the test is only failing intermittently (and infrequently).
"MainThread" #12 prio=5 os_prio=64 tid=0x00000000009b0800 nid=0x20 in Object.wait() [0xffff80ff9e2fc000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(java.base@9-ea/Native Method)
- waiting on <0x00000000ff8f3708> (a java.lang.Thread)
at java.lang.Thread.join(java.base@9-ea/Thread.java:1353)
- waiting to re-lock in wait() <0x00000000ff8f3708> (a java.lang.Thread)
at java.lang.Thread.join(java.base@9-ea/Thread.java:1427)
at sun.net.httpserver.ServerImpl.stop(jdk.httpserver@9-ea/ServerImpl.java:211)
at sun.net.httpserver.HttpsServerImpl.stop(jdk.httpserver@9-ea/HttpsServerImpl.java:78)
at TestServer.stop(TestServer.java:237)
"HTTP-Dispatcher" #39 prio=5 os_prio=64 tid=0x00000000017d8800 nid=0x3a runnable [0xffff80ff9dd7d000]
java.lang.Thread.State: RUNNABLE
at sun.net.httpserver.LeftOverInputStream.drain(jdk.httpserver@9-ea/LeftOverInputStream.java:119)
at sun.net.httpserver.LeftOverInputStream.close(jdk.httpserver@9-ea/LeftOverInputStream.java:69)
at sun.net.httpserver.ExchangeImpl.close(jdk.httpserver@9-ea/ExchangeImpl.java:146)
at sun.net.httpserver.HttpsExchangeImpl.close(jdk.httpserver@9-ea/HttpsExchangeImpl.java:66)
at TestServer$HttpHandler.handle(TestServer.java:574)
at com.sun.net.httpserver.Filter$Chain.doFilter(jdk.httpserver@9-ea/Filter.java:77)
at sun.net.httpserver.AuthFilter.doFilter(jdk.httpserver@9-ea/AuthFilter.java:82)
at com.sun.net.httpserver.Filter$Chain.doFilter(jdk.httpserver@9-ea/Filter.java:80)
at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(jdk.httpserver@9-ea/ServerImpl.java:685)
at com.sun.net.httpserver.Filter$Chain.doFilter(jdk.httpserver@9-ea/Filter.java:77)
at sun.net.httpserver.ServerImpl$Exchange.run(jdk.httpserver@9-ea/ServerImpl.java:655)
at sun.net.httpserver.ServerImpl$DefaultExecutor.execute(jdk.httpserver@9-ea/ServerImpl.java:159)
at sun.net.httpserver.ServerImpl$Dispatcher.handle(jdk.httpserver@9-ea/ServerImpl.java:440)
at sun.net.httpserver.ServerImpl$Dispatcher.run(jdk.httpserver@9-ea/ServerImpl.java:405)
at java.lang.Thread.run(java.base@9-ea/Thread.java:844)
It appears that the MainThread is attempting to stop the server (end of the main) which causes the ServerImpl to attempt to join() the HTTP-Dispatcher thread. However, that thread appears to be spinning in LeftOverInputStream.drain().
There is probably some subtle race condition here as the test is only failing intermittently (and infrequently).