JDK-8025199 : java/rmi/registry/reexport/Reexport.java failed with: Port already in use
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.rmi
  • Affected Version: 8,9
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • Submitted: 2013-09-21
  • Updated: 2021-02-25
  • Resolved: 2016-12-20
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 9
9 b150Fixed
Related Reports
Relates :  
Relates :  
Description
TESTFAIL:java/rmi/registry/reexport/Reexport.java
(To fix the bug, need to build a mechanism to start the rmiregistry on an ephemeral port in a new jvm and get the port.)


Starting registry on port 49382
JAVAVM: command = [/scratch/export/home/aurora/sandbox_keepme/jdk/bin/java, -ea, -esa, -Xmx512m, RegistryRunner, 49382]
Creating duplicate registry, this should fail...
EXPECTING PORT IN USE EXCEPTION:
Port already in use: 49382; nested exception is: 
java.net.BindException: Address already in use
java.rmi.server.ExportException: Port already in use: 49382; nested exception is: 
java.net.BindException: Address already in use
at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:336)
at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:244)
at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:411)
at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147)
at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:206)
at sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:152)
at sun.rmi.registry.RegistryImpl.<init>(RegistryImpl.java:137)
at java.rmi.registry.LocateRegistry.createRegistry(LocateRegistry.java:203)
at Reexport.createReg(Reexport.java:107)
at Reexport.main(Reexport.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:502)
at com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:92)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.BindException: Address already in use
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
at java.net.ServerSocket.bind(ServerSocket.java:376)
at java.net.ServerSocket.<init>(ServerSocket.java:238)
at java.net.ServerSocket.<init>(ServerSocket.java:130)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createServerSocket(RMIDirectSocketFactory.java:45)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createServerSocket(RMIMasterSocketFactory.java:341)
at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:666)
at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:325)
... 15 more
Bringing down the first registry
received call to exit
Trying again to start our own registry... this should work
TEST FAILED: 
Test failed with: Port already in use: 49382; nested exception is: 
java.net.BindException: Address already in use
java.rmi.server.ExportException: Port already in use: 49382; nested exception is: 
java.net.BindException: Address already in use
at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:336)
at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:244)
at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:411)
at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147)
at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:206)
at sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:152)
at sun.rmi.registry.RegistryImpl.<init>(RegistryImpl.java:137)
at java.rmi.registry.LocateRegistry.createRegistry(LocateRegistry.java:203)
at Reexport.createReg(Reexport.java:107)
at Reexport.main(Reexport.java:85)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:502)
at com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:92)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.BindException: Address already in use
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
at java.net.ServerSocket.bind(ServerSocket.java:376)
at java.net.ServerSocket.<init>(ServerSocket.java:238)
at java.net.ServerSocket.<init>(ServerSocket.java:130)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createServerSocket(RMIDirectSocketFactory.java:45)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createServerSocket(RMIMasterSocketFactory.java:341)
at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:666)
at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:325)
... 15 more
TEST FAILED: 
Test failed with: TEST FAILED: ; nested exception is: 
java.rmi.server.ExportException: Port already in use: 49382; nested exception is: 
java.net.BindException: Address already in use
TestFailedException: TEST FAILED: ; nested exception is: 
java.rmi.server.ExportException: Port already in use: 49382; nested exception is: 
java.net.BindException: Address already in use
java.rmi.server.ExportException: Port already in use: 49382; nested exception is: 
java.net.BindException: Address already in use
at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:336)
at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:244)
at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:411)
at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147)
at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:206)
at sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:152)
at sun.rmi.registry.RegistryImpl.<init>(RegistryImpl.java:137)
at java.rmi.registry.LocateRegistry.createRegistry(LocateRegistry.java:203)
at Reexport.createReg(Reexport.java:107)
at Reexport.main(Reexport.java:85)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:502)
at com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:92)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.BindException: Address already in use
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
at java.net.ServerSocket.bind(ServerSocket.java:376)
at java.net.ServerSocket.<init>(ServerSocket.java:238)
at java.net.ServerSocket.<init>(ServerSocket.java:130)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createServerSocket(RMIDirectSocketFactory.java:45)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createServerSocket(RMIMasterSocketFactory.java:341)
at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:666)
at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:325)
... 15 more
TestFailedException: TEST FAILED: ; nested exception is: 
TestFailedException: TEST FAILED: ; nested exception is: 
java.rmi.server.ExportException: Port already in use: 49382; nested exception is: 
java.net.BindException: Address already in use
TestFailedException: TEST FAILED: ; nested exception is: 
java.rmi.server.ExportException: Port already in use: 49382; nested exception is: 
java.net.BindException: Address already in use
java.rmi.server.ExportException: Port already in use: 49382; nested exception is: 
java.net.BindException: Address already in use
at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:336)
at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:244)
at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:411)
at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147)
at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:206)
at sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:152)
at sun.rmi.registry.RegistryImpl.<init>(RegistryImpl.java:137)
at java.rmi.registry.LocateRegistry.createRegistry(LocateRegistry.java:203)
at Reexport.createReg(Reexport.java:107)
at Reexport.main(Reexport.java:85)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:502)
at com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:92)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.BindException: Address already in use
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
at java.net.ServerSocket.bind(ServerSocket.java:376)
at java.net.ServerSocket.<init>(ServerSocket.java:238)
at java.net.ServerSocket.<init>(ServerSocket.java:130)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createServerSocket(RMIDirectSocketFactory.java:45)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createServerSocket(RMIMasterSocketFactory.java:341)
at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:666)
at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:325)
... 15 more

JavaTest Message: Test threw exception: TestFailedException: TEST FAILED: ; nested exception is: 
TestFailedException: TEST FAILED: ; nested exception is: 
java.rmi.server.ExportException: Port already in use: 49382; nested exception is: 
java.net.BindException: Address already in use
JavaTest Message: shutting down test

STATUS:Failed.`main' threw exception: TestFailedException: TEST FAILED: ; nested exception is: TestFailedException: TEST FAILED: ; nested exception is: java.rmi.server.ExportException: Port already in use: 49382; nested exception is: java.net.BindException: Address already in use
Comments
Root cause: running registry on TestLibrary.getUnusedRandomPort() will cause "port in use" exception, as there is a time window for a interloper to occupy the "free" port. Solution: in RegistryRunner print out the port running registry, add a class REGISTRY to control and monitor the registry sub-process, and get the running port.
19-12-2016

For java/rmi/registry/reexport/Reexport.java, there are 2 kinds of issues: 1. failed at Reexport.makeRegistry(regPort); (at line 64), which will cause failure of starting a registry, then subsequent codes fail. 2. failed at reg = createReg(false, regPort); (at line 85), which will cause failure of starting a registry, then subsequent codes fail. For java/rmi/registry/interfaceHash/InterfaceHash.java, there is no valid log existing.
29-09-2016

Added java/rmi/registry/interfaceHash/InterfaceHash.java which has been observed to fail with "Port already in use." The likely problem for all of these is the open-close-reopen race condition.
04-03-2015

RULE java/rmi/activation/Activatable/restartCrashedService/RestartCrashedService.java Exception TestFailedException: TEST FAILED: ; nested exception is: TestFailedException: TEST FAILED: Rmid process exited with status ... after ...ms. RULE java/rmi/activation/Activatable/restartCrashedService/RestartCrashedService.java Exception TestFailedException: TEST FAILED: Rmid process exited with status ... after ...ms. RULE java/rmi/activation/Activatable/restartCrashedService/RestartCrashedService.java Exception java.net.BindException: Address already in use: NET_Bind
25-12-2014