> 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.

Matthew Donovan has updated the pull request incrementally with one additional 
commit since the last revision:

  Fixed whitespace.
  
  Co-authored-by: Andrey Turbanov <turban...@gmail.com>

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/14378/files
  - new: https://git.openjdk.org/jdk/pull/14378/files/b25620d4..3e3768d0

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=14378&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=14378&range=00-01

  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/14378.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/14378/head:pull/14378

PR: https://git.openjdk.org/jdk/pull/14378

Reply via email to