RFR: 8278339: ServerSocket::isClosed may return false after accept throws

Daniel Fuchs dfuchs at openjdk.java.net
Tue Dec 7 14:21:12 UTC 2021


On Tue, 7 Dec 2021 12:29:09 GMT, Alan Bateman <alanb at openjdk.org> wrote:

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

LGTM. I agree, setting the flag before attempting to close the impl is a better behavior.

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

Marked as reviewed by dfuchs (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/6741


More information about the net-dev mailing list