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.

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

Commit messages:
 - Trailing whitespace
 - Initial commit

Changes: https://git.openjdk.java.net/jdk/pull/6712/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=6712&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8278270
  Stats: 100 lines in 1 file changed: 35 ins; 34 del; 31 mod
  Patch: https://git.openjdk.java.net/jdk/pull/6712.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/6712/head:pull/6712

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

Reply via email to