> Port number of 0 is not handled at JMX or RMI layer. The given port
number is passed onto the ServerSocket.
>
>
https://docs.oracle.com/javase/10/docs/api/java/net/ServerSocket.html#%3Cinit%3E(int)
Using a port number of 0 to get a free port has to be done very carefully
to avoid running into other, more difficult to find issues.
Jerry T. fix a few of these before he left us:
JDK-8182757 JDWP: Socket Transport handshake hangs on Solaris
https://bugs.openjdk.java.net/browse/JDK-8182757
JDK-8178676 nsk/jvmti/AttachOnDemand/attach045 fails with Exception
https://bugs.openjdk.java.net/browse/JDK-8178676
JDK-8188867
nsk/jdi/VirtualMachineManager/createVirtualMachine/createVM004
(and other tests) timeout do to socket problem
https://bugs.openjdk.java.net/browse/JDK-8188867
As an example of the difficulty, I tried to fix this bug:
JDK-8182307 Error during JRMP connection establishment
https://bugs.openjdk.java.net/browse/JDK-8182307
and had to back out my fix because it caused a couple of tests to fail.
I'm tracking the redo here:
JDK-8193227 [REDO] 8182307 Error during JRMP connection establishment
https://bugs.openjdk.java.net/browse/JDK-8193227
and I haven't had an epiphany for how to fix it without breaking
other tests (yet) so I just decommitted it from JDK11.
I'm not saying that your current fix will be susceptible to very
intermittent hangs on Solaris. I would have to take a very close
look at it and I haven't done that yet.
Dan
On 6/21/18 2:47 AM, Harsha Wardhana B wrote:
On Thursday 21 June 2018 10:30 AM, mandy chung wrote:
On 6/20/18 1:14 AM, Harsha Wardhana B wrote:
Hi,
Please find the fix below for the bug
JDK-8204661 : Show error 'Port already in use' in
HashedPasswordFileTest.java
having webrev at,
http://cr.openjdk.java.net/~hb/8204661/webrev.00/
The problem root-cause is discussed in the comments section of the bug.
The fix above lets the default agent pick a free port by passing
'port=0' value and then reads the JMX Connector URL from Perf Counters.
This looks fine. Please add this issue number to @bug.
This is interesting. I was not aware of setting port=0 will
auto-assign a free port. Do you know if it was added for testing
purpose (which I assume so)?
Port number of 0 is not handled at JMX or RMI layer. The given port
number is passed onto the ServerSocket.
https://docs.oracle.com/javase/10/docs/api/java/net/ServerSocket.html#%3Cinit%3E(int)
For example
test/jdk/sun/management/jmxremote/bootstrap/RmiBootstrapTest.java
uses jdk.testlibrary.Utils.getFreePort() to get a free port number.
Mandy
Harsha