On Mon, 6 Dec 2021 11:29:20 GMT, Aleksey Shipilev <sh...@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.
>
> src/java.base/share/classes/java/net/ServerSocket.java line 90:
> 
>> 88:     private volatile boolean created;   // impl.create(boolean) called
>> 89:     private volatile boolean bound;
>> 90:     private volatile boolean closed;
> 
> I don't see why these two need to be `volatile`, but we can keep them for 
> extra safety.

isBound and isClose poll the state.

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

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

Reply via email to