On Mon, 31 Oct 2022 19:08:14 GMT, Chris Plummer <cjplum...@openjdk.org> wrote:
> 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. src/jdk.jdwp.agent/share/native/libjdwp/threadControl.c line 741: > 739: node->toBeResumed = JNI_TRUE; > 740: } > 741: JDI_ASSERT(error != JVMTI_ERROR_THREAD_SUSPENDED); Should the original code remain in place because another JVMTI agent may have suspended the thread? src/jdk.jdwp.agent/share/native/libjdwp/threadControl.c line 952: > 950: * won't suspend this thread after we are done with the resumeAll. > 951: */ > 952: if (node->suspendCount == 1 && node->suspendOnStart) { This is also related to Thread.suspend() and the previous comment I made above. ------------- PR: https://git.openjdk.org/jdk/pull/10922