On Sun, 5 Dec 2021 16:44:05 GMT, Alan Bateman <al...@openjdk.org> wrote:
> There are several thread safety issues in java.net.ServerSocket, issues that > go back to at least JDK 1.4. > > The issue of most concern is async close of a ServerSocket that is initially > created unbound and where close may be called at or around the time the > underlying SocketImpl is created or the socket is bound. > > The summary of the changes are: > > 1. The "impl" field is changed to be final field. > 2. The closeLock is renamed to stateLock and is required to change the (now > volatile) created, bound or closed fields. > 3. The needless synchronization has been removed from xxxSoTimeout and > xxxReceiveBufferSize. > > There are many redundant checks for isClosed() and other state that could be > removed. Removing them would subtle change the exception thrown when there > are two or more failure conditions. So they are left as is. LGTM. It's a bit distateful to change the semantics of `createImpl` but since the method is now private it does look OK. ------------- Marked as reviewed by dfuchs (Reviewer). PR: https://git.openjdk.java.net/jdk/pull/6712