On Thu, 8 Jun 2023 14:25:26 GMT, Matthew Donovan <mdono...@openjdk.org> wrote:
> This PR improves the reliability of the BlockedAsyncClose test by addressing > an edge case/race condition between the two test threads. The purpose of the > test is to verify that an SSLSocket can be closed if a thread is blocked in a > write operation. > > The test starts a "write" thread that writes data to a socket until the > output buffer was filled, causing the write operation to block. The main > thread then calls `SSLSocket.close()`. The original code used > `Thread.sleep(1000)` to wait for the write-thread to block. However, 1 second > isn't always long enough and if the write-thread isn't blocked and the output > buffer is full (or almost full), the `socket.close()` call may block when it > tries to send the close_notify alert. This is the condition that caused this > bug. > > My change uses a Lock to determine if the write thread is blocked. In the > write thread, the lock creates a critical section around the `write()` call. > The main thread uses `tryLock()` with a timeout to determine that the write() > call is taking too long and thus likely blocked. > > While there, I also updated the test to use the SSLContextTemplate class. This pull request has now been integrated. Changeset: 8042a50b Author: Matthew Donovan <mdono...@openjdk.org> URL: https://git.openjdk.org/jdk/commit/8042a50b99a671390910afa5f816894f77255429 Stats: 57 lines in 1 file changed: 20 ins; 24 del; 13 mod 8309305: sun/security/ssl/SSLSocketImpl/BlockedAsyncClose.java fails with jtreg test timeout Reviewed-by: djelinski ------------- PR: https://git.openjdk.org/jdk/pull/14378