This change fixes deadlocks described in the JBS-bug by: * Releasing `handlerLock` before waiting on `threadLock` in `blockOnDebuggerSuspend()`
* Notifying on `threadLock` in `threadControl_reset()` Also the actions in handleAppResumeBreakpoint() are moved/deferred until doPendingTasks() runs. This is necessary because an event handler must not release handlerLock first and foremost because handlers are called while iterating the handler chain for an event type which is protected by handlerLock (see https://github.com/openjdk/jdk/pull/5805) The first commit delays the cleanup actions after leaving the loop in `debugLoop_run()`. It allows to reproduce the deadlock running the dispose003 test with the command make run-test TEST=test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/dispose/dispose003 The second commit adds a new test that reproduces the deadlock when calling threadControl_resumeThread() while a thread is waiting in blockOnDebuggerSuspend(). The third commit contains the fix described above. With it the deadlocks cannot be reproduced anymore. The forth commit removes the diagnostic code introduced with the first commit again. The fix passed test/hotspot/jtreg/serviceability/jdwp test/jdk/com/sun/jdi test/hotspot/jtreg/vmTestbase/nsk/jdwp test/hotspot/jtreg/vmTestbase/nsk/jdi ------------- Commit messages: - Remove delay in cleanup again. - Fix that prevents deadlocks. - New test that deadlocks target VM calling ThreadReference.resume(). - Delay cleanup after JDWP Dispose command to trigger deadlock in the test dispose003 Changes: https://git.openjdk.java.net/jdk/pull/5849/files Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=5849&range=00 Issue: https://bugs.openjdk.java.net/browse/JDK-8274687 Stats: 280 lines in 2 files changed: 262 ins; 13 del; 5 mod Patch: https://git.openjdk.java.net/jdk/pull/5849.diff Fetch: git fetch https://git.openjdk.java.net/jdk pull/5849/head:pull/5849 PR: https://git.openjdk.java.net/jdk/pull/5849