RFR: 8274687: JDWP deadlocks if some Java thread reaches wait in blockOnDebuggerSuspend [v3]
Richard Reingruber
rrich at openjdk.java.net
Tue Oct 12 07:51:22 UTC 2021
> 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
Richard Reingruber has updated the pull request incrementally with one additional commit since the last revision:
Improve @summary section of test.
-------------
Changes:
- all: https://git.openjdk.java.net/jdk/pull/5849/files
- new: https://git.openjdk.java.net/jdk/pull/5849/files/6cc006b1..e198e5ea
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=5849&range=02
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=5849&range=01-02
Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 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
More information about the serviceability-dev
mailing list