On Fri, 2 Jul 2021 21:23:39 GMT, Alex Menkov <amen...@openjdk.org> wrote:
> 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. This pull request has now been integrated. Changeset: 8785737b Author: Alex Menkov <amen...@openjdk.org> URL: https://git.openjdk.java.net/jdk/commit/8785737ba5f398888816ddd0f50adeea6a75bb0f Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod 8269616: serviceability/dcmd/framework/VMVersionTest.java fails with Address already in use error Reviewed-by: sspitsyn, kevinw ------------- PR: https://git.openjdk.java.net/jdk/pull/4676