Deadlock between SSLSocketImpl.close and SSLSocketImpl.getConnectionState
Issue
- We see a deadlock between SSLSocketImpl.getConnectionState and SSLSocketImpl.close:
"Thread-16":
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.getConnectionState(SSLSocketImpl.java:601)
- waiting to lock <0xb96944d8> (a com.sun.net.ssl.internal.ssl.SSLSocketImpl)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.isClosed(SSLSocketImpl.java:1328)
at java.net.Socket.getTcpNoDelay(Socket.java:877)
at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.getTcpNoDelay(BaseSSLSocketImpl.java:325)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecordInternal(SSLSocketImpl.java:770)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:753)
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:100)
- locked <0xb9694590> (a com.sun.net.ssl.internal.ssl.AppOutputStream)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
- locked <0xb96945a8> (a java.io.BufferedOutputStream)
at java.io.PrintStream.flush(PrintStream.java:288)
- locked <0xb96945c0> (a java.io.PrintStream)
at sun.net.www.MessageHeader.print(MessageHeader.java:245)
- locked <0xb9e03158> (a sun.net.www.MessageHeader)
at sun.net.www.http.HttpClient.writeRequests(HttpClient.java:604)
at sun.net.www.http.HttpClient.writeRequests(HttpClient.java:618)
at sun.net.www.protocol.http.HttpURLConnection.writeRequests(HttpURLConnection.java:576)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1216)
- locked <0xb9e03170> (a sun.net.www.protocol.https.DelegateHttpsURLConnection)
at sun.net.www.protocol.http.HttpURLConnection.getHeaderField(HttpURLConnection.java:2340)
at java.net.HttpURLConnection.getHeaderFieldDate(HttpURLConnection.java:450)
at java.net.URLConnection.getLastModified(URLConnection.java:532)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getLastModified(HttpsURLConnectionImpl.java:398)
...
"Finalizer":
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0xb9698c20> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:811)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:842)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1178)
at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:186)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:262)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:751)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:624)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.sendAlert(SSLSocketImpl.java:1875)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.warning(SSLSocketImpl.java:1713)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.closeInternal(SSLSocketImpl.java:1481)
- locked <0xb96944d8> (a com.sun.net.ssl.internal.ssl.SSLSocketImpl)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.close(SSLSocketImpl.java:1419)
at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.finalize(BaseSSLSocketImpl.java:230)
at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method)
at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:83)
at java.lang.ref.Finalizer.access$100(Finalizer.java:14)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160)
Environment
- JBoss Enterprise Application Platform (EAP)
- Java
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.