# HG changeset patch # User xuelei # Date 1449657393 0 # Node ID 279258fb670b091a07416155aa53d3839a543512 # Parent e3caf3a43d09cb6d7730d3546cd2bf7ec3318298 8141651: Deadlock in sun.security.ssl.SSLSocketImpl Reviewed-by: weijun diff -r e3caf3a43d09 -r 279258fb670b jdk/src/java.base/share/classes/sun/security/ssl/SSLSocketImpl.java --- a/jdk/src/java.base/share/classes/sun/security/ssl/SSLSocketImpl.java Tue Dec 08 13:48:22 2015 -0800 +++ b/jdk/src/java.base/share/classes/sun/security/ssl/SSLSocketImpl.java Wed Dec 09 10:36:33 2015 +0000 @@ -766,17 +766,27 @@ // records, so this also increases robustness. // if (length > 0) { + IOException ioe = null; + byte description = 0; // 0: never used, make the compiler happy writeLock.lock(); try { outputRecord.deliver(source, offset, length); } catch (SSLHandshakeException she) { // may be record sequence number overflow - fatal(Alerts.alert_handshake_failure, she); + description = Alerts.alert_handshake_failure; + ioe = she; } catch (IOException e) { - fatal(Alerts.alert_unexpected_message, e); + description = Alerts.alert_unexpected_message; + ioe = e; } finally { writeLock.unlock(); } + + // Be care of deadlock. Please don't place the call to fatal() + // into the writeLock locked block. + if (ioe != null) { + fatal(description, ioe); + } } /*