-
Bug
-
Resolution: Unresolved
-
P4
-
None
-
x86_64
-
os_x
This is due to race condition in
registry = TestLibrary.createRegistryOnUnusedPort(); which invokes
public static int getUnusedRandomPort()
which is flawed as the allocated port can be reused by the OS.
AND
there's an OSX port allocation bug whereby the OS allocates an ephemeral port currently in use for a tcp4 socket to a ServerSocket on wildcard ip address which uses a tcp46 (INET6) socket
This is a pervasive issue across on macosx
command: main HttpSocketTest
reason: User specified action: run main/othervm/policy=security.policy HttpSocketTest
Mode: othervm [/othervm specified]
elapsed time (seconds): 0.28
----------configuration:(0/0)----------
----------System.out:(0/0)----------
----------System.err:(73/4825)----------
installing socket factory
Starting registry
TEST FAILED:
Test failed with: Port already in use: 49157; nested exception is:
java.net.BindException: Address already in use (Bind failed)
java.rmi.server.ExportException: Port already in use: 49157; nested exception is:
java.net.BindException: Address already in use (Bind failed)
at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:346)
at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:254)
at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:412)
at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147)
at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:237)
at sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:219)
at sun.rmi.registry.RegistryImpl.<init>(RegistryImpl.java:204)
at java.rmi.registry.LocateRegistry.createRegistry(LocateRegistry.java:203)
at TestLibrary.createRegistryOnUnusedPort(TestLibrary.java:410)
at HttpSocketTest.main(HttpSocketTest.java:80)
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:498)
at com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:127)
at java.lang.Thread.run(Thread.java:750)
Caused by: java.net.BindException: Address already in use (Bind failed)
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:513)
at java.net.ServerSocket.bind(ServerSocket.java:375)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at java.net.ServerSocket.<init>(ServerSocket.java:128)
at sun.rmi.transport.proxy.HttpAwareServerSocket.<init>(HttpAwareServerSocket.java:50)
at sun.rmi.transport.proxy.RMIHttpToPortSocketFactory.createServerSocket(RMIHttpToPortSocketFactory.java:51)
at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:670)
at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:335)
... 15 more
TestFailedException: TEST FAILED: ; nested exception is:
java.rmi.server.ExportException: Port already in use: 49157; nested exception is:
java.net.BindException: Address already in use (Bind failed)
java.rmi.server.ExportException: Port already in use: 49157; nested exception is:
java.net.BindException: Address already in use (Bind failed)
at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:346)
at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:254)
at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:412)
at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147)
at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:237)
at sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:219)
at sun.rmi.registry.RegistryImpl.<init>(RegistryImpl.java:204)
at java.rmi.registry.LocateRegistry.createRegistry(LocateRegistry.java:203)
at TestLibrary.createRegistryOnUnusedPort(TestLibrary.java:410)
at HttpSocketTest.main(HttpSocketTest.java:80)
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:498)
at com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:127)
at java.lang.Thread.run(Thread.java:750)
Caused by: java.net.BindException: Address already in use (Bind failed)
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:513)
at java.net.ServerSocket.bind(ServerSocket.java:375)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at java.net.ServerSocket.<init>(ServerSocket.java:128)
at sun.rmi.transport.proxy.HttpAwareServerSocket.<init>(HttpAwareServerSocket.java:50)
at sun.rmi.transport.proxy.RMIHttpToPortSocketFactory.createServerSocket(RMIHttpToPortSocketFactory.java:51)
at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:670)
at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:335)
... 15 more
JavaTest Message: Test threw exception: TestFailedException: TEST FAILED: ; nested exception is:
java.rmi.server.ExportException: Port already in use: 49157; nested exception is:
java.net.BindException: Address already in use (Bind failed)
JavaTest Message: shutting down test
STATUS:Failed.`main' threw exception: TestFailedException: TEST FAILED: ; nested exception is: java.rmi.server.ExportException: Port already in use: 49157; nested exception is: java.net.BindException: Address already in use (Bind failed)
registry = TestLibrary.createRegistryOnUnusedPort(); which invokes
public static int getUnusedRandomPort()
which is flawed as the allocated port can be reused by the OS.
AND
there's an OSX port allocation bug whereby the OS allocates an ephemeral port currently in use for a tcp4 socket to a ServerSocket on wildcard ip address which uses a tcp46 (INET6) socket
This is a pervasive issue across on macosx
command: main HttpSocketTest
reason: User specified action: run main/othervm/policy=security.policy HttpSocketTest
Mode: othervm [/othervm specified]
elapsed time (seconds): 0.28
----------configuration:(0/0)----------
----------System.out:(0/0)----------
----------System.err:(73/4825)----------
installing socket factory
Starting registry
TEST FAILED:
Test failed with: Port already in use: 49157; nested exception is:
java.net.BindException: Address already in use (Bind failed)
java.rmi.server.ExportException: Port already in use: 49157; nested exception is:
java.net.BindException: Address already in use (Bind failed)
at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:346)
at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:254)
at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:412)
at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147)
at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:237)
at sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:219)
at sun.rmi.registry.RegistryImpl.<init>(RegistryImpl.java:204)
at java.rmi.registry.LocateRegistry.createRegistry(LocateRegistry.java:203)
at TestLibrary.createRegistryOnUnusedPort(TestLibrary.java:410)
at HttpSocketTest.main(HttpSocketTest.java:80)
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:498)
at com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:127)
at java.lang.Thread.run(Thread.java:750)
Caused by: java.net.BindException: Address already in use (Bind failed)
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:513)
at java.net.ServerSocket.bind(ServerSocket.java:375)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at java.net.ServerSocket.<init>(ServerSocket.java:128)
at sun.rmi.transport.proxy.HttpAwareServerSocket.<init>(HttpAwareServerSocket.java:50)
at sun.rmi.transport.proxy.RMIHttpToPortSocketFactory.createServerSocket(RMIHttpToPortSocketFactory.java:51)
at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:670)
at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:335)
... 15 more
TestFailedException: TEST FAILED: ; nested exception is:
java.rmi.server.ExportException: Port already in use: 49157; nested exception is:
java.net.BindException: Address already in use (Bind failed)
java.rmi.server.ExportException: Port already in use: 49157; nested exception is:
java.net.BindException: Address already in use (Bind failed)
at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:346)
at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:254)
at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:412)
at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147)
at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:237)
at sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:219)
at sun.rmi.registry.RegistryImpl.<init>(RegistryImpl.java:204)
at java.rmi.registry.LocateRegistry.createRegistry(LocateRegistry.java:203)
at TestLibrary.createRegistryOnUnusedPort(TestLibrary.java:410)
at HttpSocketTest.main(HttpSocketTest.java:80)
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:498)
at com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:127)
at java.lang.Thread.run(Thread.java:750)
Caused by: java.net.BindException: Address already in use (Bind failed)
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:513)
at java.net.ServerSocket.bind(ServerSocket.java:375)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at java.net.ServerSocket.<init>(ServerSocket.java:128)
at sun.rmi.transport.proxy.HttpAwareServerSocket.<init>(HttpAwareServerSocket.java:50)
at sun.rmi.transport.proxy.RMIHttpToPortSocketFactory.createServerSocket(RMIHttpToPortSocketFactory.java:51)
at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:670)
at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:335)
... 15 more
JavaTest Message: Test threw exception: TestFailedException: TEST FAILED: ; nested exception is:
java.rmi.server.ExportException: Port already in use: 49157; nested exception is:
java.net.BindException: Address already in use (Bind failed)
JavaTest Message: shutting down test
STATUS:Failed.`main' threw exception: TestFailedException: TEST FAILED: ; nested exception is: java.rmi.server.ExportException: Port already in use: 49157; nested exception is: java.net.BindException: Address already in use (Bind failed)
- relates to
-
JDK-8317517 make TestLibrary.createRegistryOnUnusedPort() more robust to BindExceptions
- Open