The debug agent sets a breakpoint in Thread.resume() so it can prevent the
debugger from suspending threads while in the resume call:
/*
* Track the resuming thread by marking it as being within
* a resume and by setting up for notification on
* a frame pop or exception. We won't allow the debugger
* to suspend threads while any thread is within a
* call to resume. This (along with the block below)
* ensures that when the debugger
* suspends a thread it will remain suspended.
*/
trackAppResume(resumer);
Now that Thread.resume() is unsupported and just throws
UnsupportedOperationException, all debug agent code related to this support can
be removed. It's at least a couple of hundred lines of code, and with a fair
amount of confusing synchronization. It will be nice to see it go.
Also, there is a little bit of code to deal with the app calling
Thread.suspend(). I'm a bit unsure of it's removal, because I'm not certain if
we also need to consider another JVMTI agent doing a suspend. However, we don't
seem to defend against another JVMTI agent resuming a thread, so maybe the
debug agent is just not expected to work if another JVMTI agent interferes. I
would appreciate some insight on this possibility. I've called out this code in
the inlined review comments.
-------------
Commit messages:
- Get rid of Thread.resume() and Thread.suspend() support
Changes: https://git.openjdk.org/jdk/pull/10922/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=10922&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8296089
Stats: 352 lines in 3 files changed: 1 ins; 346 del; 5 mod
Patch: https://git.openjdk.org/jdk/pull/10922.diff
Fetch: git fetch https://git.openjdk.org/jdk pull/10922/head:pull/10922
PR: https://git.openjdk.org/jdk/pull/10922