RFR: 8072701: resume001 failed due to ERROR: timeout for waiting for a BreakpintEvent

Alex Menkov amenkov at openjdk.org
Tue Jul 9 19:20:20 UTC 2024


On Tue, 9 Jul 2024 04:43:59 GMT, Chris Plummer <cjplummer at openjdk.org> wrote:

> The test hits a breakpoint on thread2 with SUSPEND_EVENT_THREAD policy, so only thread2 is suspended. It then does a vm.suspend(), which suspends all threads and bumps the suspendCount of thread2 up to 2. It then does an eventSet.resume(), which decrements the thread2 suspendCount to 1, so now all threads are suspended with a suspendCount of 1. thread2 is then resumed and we expect to hit the next thread2 breakpoint. The problem is that thread2 can't hit the breakpoint until the main thread has proceeded far enough, and if the vm.suspend() that suspended the main thread happens too quickly, it won't have proceeded far enough, so thread2 never hits the breakpoint.
> 
> Essentially we need a vm.resume() to allow the main thread to run, but we need to do it in a way that does nullify part of what the test is testing for. So in order to allow the vm.resume() but not subvert the intent of the test, we first do a thread2.suspend() so the vm.resume() won't resume thread2.
> 
> Testing in progress: tier1 and tier5 svc testing

test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/resume/resume001.java line 356:

> 354:                 }
> 355: 
> 356:                 // We need to resume the main thread because thread2 might be blocked on it,

This does not look correct to me.
This is the last test scenario - thread2.resume should resumes the thread while vm is suspended.
thread2 should not be blocked on main thread.
Looking at the debuggee I suppose the blocking is possible during logging. I'd suggest to update the debugee and remove any logging between breakpoints 2 and 3

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/20088#discussion_r1671037516


More information about the serviceability-dev mailing list