RFR: 8278339: ServerSocket::isClosed may return false after accept throws
Alan Bateman
alanb at openjdk.java.net
Tue Dec 7 14:02:45 UTC 2021
JDK-8278270 introduces a small regression. If a ServerSocket is closed while another thread is blocked in the accept method then the other thread may observe isClosed returning false, i.e. code may catch IOException and check isClosed before the "closed" flag gets to true.
I've changed the close method to set the "closed" flag before closing the underlying impl. This is consistent with the network channels and also consistent with async close where the close completes on the thread that was blocked in accept. The change also prevents re-attempting the underlying impl in the unlikely event that it fails(an area that is completed unspecified). Overall I think this is preferable to have add synchronization to isClosed.
-------------
Commit messages:
- Fix test summary
- Fix exception message
- Initial commit
Changes: https://git.openjdk.java.net/jdk/pull/6741/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=6741&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8278339
Stats: 93 lines in 2 files changed: 85 ins; 7 del; 1 mod
Patch: https://git.openjdk.java.net/jdk/pull/6741.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/6741/head:pull/6741
PR: https://git.openjdk.java.net/jdk/pull/6741
More information about the net-dev
mailing list