--- 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);
+ }
}
/*