From 30655cc742f0faffb01cfb996ad0d243baac078a Mon Sep 17 00:00:00 2001 From: Xue-Lei Andrew Fan Date: Wed, 9 Dec 2015 10:36:33 +0000 Subject: [PATCH] 8141651: Deadlock in sun.security.ssl.SSLSocketImpl Reviewed-by: weijun --- .../classes/sun/security/ssl/SSLSocketImpl.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/jdk/src/java.base/share/classes/sun/security/ssl/SSLSocketImpl.java b/jdk/src/java.base/share/classes/sun/security/ssl/SSLSocketImpl.java index e3919c5d043..0162dc3b477 100644 --- a/jdk/src/java.base/share/classes/sun/security/ssl/SSLSocketImpl.java +++ b/jdk/src/java.base/share/classes/sun/security/ssl/SSLSocketImpl.java @@ -766,17 +766,27 @@ public final class SSLSocketImpl extends BaseSSLSocketImpl { // 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); + } } /*