RFR: 8327650: Test java/nio/channels/DatagramChannel/StressNativeSignal.java timed out [v5]
Mark Sheppard
msheppar at openjdk.org
Tue Jun 4 23:37:06 UTC 2024
> JDK-8327650 Test java/nio/channels/DatagramChannel/StressNativeSignal.java timed out
>
> Please oblige and review the following test only fix to alleviate a race condition within the test.
>
> A race condition exists, in the test StressNativeSignal, due to the setting of a condition variable, shouldTerminate, in the main thread’s invocation of UDPThread::terminate and the setting of shouldTerminate in the main run method of UDPThread. A similar scenario exists for the ServerSocketThread. The variable shouldTerminate is a member variable, and is by default set to false, so the setting to false in the run methods is not required. Removing shouldTerminate = false; statement mitigates the race condition.
>
> Additionally, a number of other minor changes have been added to the test:
> * it is desired to test the asynchronous close of the DatagramChannel::receive method which may trigger the NativeThread::signal issue, thus the while loop has been changed to a do { } while(); loop to invoke the DC receive method.
>
> * The Thread::sleep has been replaced with a CountDownLatch to make the test slightly more deterministic.
>
> It is noted in passing the ServerSocket::run method contains a redundant while loop for reading from an established connection stream, which is never created. This code is never reached as there is no peer to connect to the ServerSocket and the test is on the ServerSocket::accept method.
>
> Another issue of note is that the test is using a hardcoded IANA assigned port 1122 (availant-mgr). But, this has not been altered. The ServerSocket test scenario could use an ephemeral port i.e. new ServerSocket(0);
Mark Sheppard has updated the pull request incrementally with one additional commit since the last revision:
JDK-8327650 Test java/nio/channels/DatagramChannel/StressNativeSignal.java timed out — updates from review feedback: test member variables udpThread and serverSocketThread have been made final, with initialisation from two init methods. Unused read loop in ServerSocketThread run method removed. In the event of an unforeseen return from the accept call, the socket is closed and a RuntimeException is thrown.
Additionally, an auxiliary JBS item, JDK-8333526 has been opened to undertake the suggested restructuring of the test to “fail fast” in the event of an impactful Exception being thrown during any stage of the test execution
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/19312/files
- new: https://git.openjdk.org/jdk/pull/19312/files/8e23220e..5faee215
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=19312&range=04
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=19312&range=03-04
Stats: 37 lines in 1 file changed: 22 ins; 7 del; 8 mod
Patch: https://git.openjdk.org/jdk/pull/19312.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/19312/head:pull/19312
PR: https://git.openjdk.org/jdk/pull/19312
More information about the nio-dev
mailing list