diff --git a/src/java.base/share/classes/sun/security/ssl/SSLSocketImpl.java b/src/java.base/share/classes/sun/security/ssl/SSLSocketImpl.java index 8b28a49eba6..159b88f3694 100644 --- a/src/java.base/share/classes/sun/security/ssl/SSLSocketImpl.java +++ b/src/java.base/share/classes/sun/security/ssl/SSLSocketImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2021, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1784,17 +1784,23 @@ private void waitForClose() throws IOException { SSLLogger.fine("wait for close_notify or alert"); } - while (!conContext.isInboundClosed()) { - try { - Plaintext plainText = decode(null); - // discard and continue - if (SSLLogger.isOn && SSLLogger.isOn("ssl")) { - SSLLogger.finest( - "discard plaintext while waiting for close", plainText); + appInput.readLock.lock(); + try { + while (!conContext.isInboundClosed()) { + try { + Plaintext plainText = decode(null); + // discard and continue + if (SSLLogger.isOn && SSLLogger.isOn("ssl")) { + SSLLogger.finest( + "discard plaintext while waiting for close", + plainText); + } + } catch (Exception e) { // including RuntimeException + handleException(e); } - } catch (Exception e) { // including RuntimeException - handleException(e); } + } finally { + appInput.readLock.unlock(); } } }