SocketIOPipe/IOPipe classes can select listening port by 2 ways:
1. caller specifies "-transport.address=dynamic" argument creating
ArgumentHandler,
and calls Binder.prepareForPipeConnection (actually see
nsk.share.jpda.DebugeeBinder.prepareForPipeConnection()) before start listening.
In the case prepareForPipeConnection creates socket and this socket later is
used by IOPipe.
2. just start IOPipe listening.
Then port is selected by calling
nsk.share.jpda.DebugeeArgumentHandler.getTransportPort() which use
findFreePort() method:
ServerSocket ss;
try {
ss = new ServerSocket(0);
return String.valueOf(ss.getLocalPort());
}finally {
ss.close();
}
This method is known to be error prone (sometimes causes "address in use"
error).
The fix adds "-transport.address=dynamic" argument so IOPipe use 1st method.
-------------
Commit messages:
- Fixed "address in use" error
Changes: https://git.openjdk.java.net/jdk/pull/4676/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=4676&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8269616
Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
Patch: https://git.openjdk.java.net/jdk/pull/4676.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/4676/head:pull/4676
PR: https://git.openjdk.java.net/jdk/pull/4676