RFR [8034262] Test java/lang/ProcessBuilder/CloseRace.java fails (original) (raw)

Ivan Gerasimov ivan.gerasimov at oracle.com
Wed Mar 12 08:36:51 UTC 2014


Thanks Martin

On 12.03.2014 2:45, Martin Buchholz wrote:

Well done!

Not checking for interrupt in the loop is clearly my bug. dumpAllStacks looks like a very useful utility method (basically what jstack does). It feels like we're reinventing the wheel here, but I'm not sure.

jstack calls the hotspot-specific code to dump the stack traces, but I used the jdk-level routine. The dumpAllStacks() function has already done its job, so I could probably just remove it. Though it may be better to keep it just in case.

Instead of "break theLoop" I would have simply returned from the method.

OK, did that. Here's the updated webrev:

http://cr.openjdk.java.net/~igerasim/8034262/2/webrev/

Sincerely yours, Ivan

On Tue, Mar 11, 2014 at 11:03 AM, Ivan Gerasimov <ivan.gerasimov at oracle.com <mailto:ivan.gerasimov at oracle.com>> wrote: Thank you Martin!

On 11.03.2014 19:04, Martin Buchholz wrote: Thanks for working on my brittle racy tests.

Adding a latch as you did is a good improvement, although there's a good chance the real problem lies elsewhere. My standard name for such latches is "threadsStarted", which I think is a bit better than "startedSignal". Please rename. No problem, renamed. My simple calls to Thread.join are too optimistic. More likely to be helpful is code like (pseudocode follows): thread.join(10, SECONDS); if (thread.isAlive()) { dumpAllStacks(); fail(); } Yes, it was a good idea to do that! After implementing your suggestion, I could finally reproduce the failure. The OpenLoop child thread was spinning in the do-while loop, waiting for 'count of fds in use' to become 3. The simple solution is to add a check weather the current thread is interrupted to this and other loops. Would you please take a look at the updated webrev? http://cr.openjdk.java.net/~igerasim/8034262/1/webrev/ <http://cr.openjdk.java.net/%7Eigerasim/8034262/1/webrev/> Sincerely yours, Ivan That's more work to implement - optional.

On Tue, Mar 11, 2014 at 5:24 AM, Ivan Gerasimov <ivan.gerasimov at oracle.com <mailto:ivan.gerasimov at oracle.com>> wrote: Hello everybody! The test java/lang/ProcessBuilder/CloseRace.java was reported to intermittently fail. The test timed out, which should mean that at least one of the child threads was never interrupted. I couldn't reproduce the failure, but I suspect it might happen due to call to interrupt() before the child thread became alive (I'm not really sure if it's possible to be non-alive after call to start()). The fix is to explicitly synchronize children with the parent. Would you please help review the fix? BUGURL: https://bugs.openjdk.java.net/browse/JDK-8034262 WEBREV: http://cr.openjdk.java.net/~igerasim/8034262/0/webrev/ <http://cr.openjdk.java.net/%7Eigerasim/8034262/0/webrev/> Sincerely yours, Ivan



More information about the core-libs-dev mailing list