The fix for JDK-8165437 started using JVM_Nanotime to read the time and calculate timeouts. The function returns a 64-bit jlong value. But the variables in the code that get assigned from it are only long types and so will only be 32-bit on 32-bit systems. This leads to truncation and breakage in the socket code.
This is manifesting most clearly with the jtreg tests using AgentVM mode where we see failures:
Error. Agent communication error: java.net.SocketException: Connection reset; check console log for any additional details
Curiously we have also seen this failure on OSX which suggest there may be another issue with the timeout code:
TEST RESULT: Error. Agent communication error: java.io.EOFException; check console log for any additional details
--------------------------------------------------
[2017-05-03 20:44:48,372] Agent[1]: stderr: java.net.SocketException: Invalid argument (select/poll failed)
[2017-05-03 20:44:48,373] Agent[1]: stderr: at java.base/java.net.SocketInputStream.socketRead0(Native Method)
[2017-05-03 20:44:48,373] Agent[1]: stderr: at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
[2017-05-03 20:44:48,373] Agent[1]: stderr: at java.base/java.net.SocketInputStream.read(SocketInputStream.java:171)
[2017-05-03 20:44:48,373] Agent[1]: stderr: at java.base/java.net.SocketInputStream.read(SocketInputStream.java:141)
[2017-05-03 20:44:48,373] Agent[1]: stderr: at java.base/java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
[2017-05-03 20:44:48,373] Agent[1]: stderr: at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:265)
[2017-05-03 20:44:48,373] Agent[1]: stderr: at java.base/java.io.FilterInputStream.read(FilterInputStream.java:83)
[2017-05-03 20:44:48,373] Agent[1]: stderr: at com.sun.javatest.regtest.agent.AgentServer.run(AgentServer.java:178)
[2017-05-03 20:44:48,373] Agent[1]: stderr: at com.sun.javatest.regtest.agent.AgentServer.main(AgentServer.java:60)
This is manifesting most clearly with the jtreg tests using AgentVM mode where we see failures:
Error. Agent communication error: java.net.SocketException: Connection reset; check console log for any additional details
Curiously we have also seen this failure on OSX which suggest there may be another issue with the timeout code:
TEST RESULT: Error. Agent communication error: java.io.EOFException; check console log for any additional details
--------------------------------------------------
[2017-05-03 20:44:48,372] Agent[1]: stderr: java.net.SocketException: Invalid argument (select/poll failed)
[2017-05-03 20:44:48,373] Agent[1]: stderr: at java.base/java.net.SocketInputStream.socketRead0(Native Method)
[2017-05-03 20:44:48,373] Agent[1]: stderr: at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
[2017-05-03 20:44:48,373] Agent[1]: stderr: at java.base/java.net.SocketInputStream.read(SocketInputStream.java:171)
[2017-05-03 20:44:48,373] Agent[1]: stderr: at java.base/java.net.SocketInputStream.read(SocketInputStream.java:141)
[2017-05-03 20:44:48,373] Agent[1]: stderr: at java.base/java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
[2017-05-03 20:44:48,373] Agent[1]: stderr: at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:265)
[2017-05-03 20:44:48,373] Agent[1]: stderr: at java.base/java.io.FilterInputStream.read(FilterInputStream.java:83)
[2017-05-03 20:44:48,373] Agent[1]: stderr: at com.sun.javatest.regtest.agent.AgentServer.run(AgentServer.java:178)
[2017-05-03 20:44:48,373] Agent[1]: stderr: at com.sun.javatest.regtest.agent.AgentServer.main(AgentServer.java:60)
- relates to
-
JDK-8165437 Evaluate the use of gettimeofday in Networking code
-
- Resolved
-