On 2/06/2018 10:43 AM, Stuart Marks wrote:
On 6/1/18 4:40 PM, David Holmes wrote:
Hi Stuart!
Nooooooo!
Just kidding!
Yaaaaaay!!!!
:-)
Actual removal looks fine but what about the corresponding JDI code:
./jdk.jdi/share/classes/com/sun/jdi/ThreadReference.java
it still has a stop(Throwable) function (it doesn't have the no-arg
one!). What happens to it? The JDI functions were never deprecated in
line with the Thread functions (suspend/resume/stop).
The ThreadReference javadoc has:
* @see java.lang.Thread#stop(Throwable)
so will need fixing.
Good catch! I had grepped around the source tree for stuff like this but
I had missed this one.
It looks to me like this interface resides on the debugger side of JDWP.
I don't know exactly where it's implemented in the target VM, but I
imagine it goes through some VM-internal or JDWP implementation
interface, not through the target VM's public java.lang.Thread.stop(thr)
interface. Is that right? (I'm not that familiar with this area of the
system.)
It's a rather complex setup but the backend that does the work is
(usually?) JVM TI, which won't go back out through the Java API.
I'm presuming that it doesn't go through j.l.Thread.stop(Throwable)
since that method has essentially been non-functional since JDK 8.
I see a couple tests for this in
test/hotspot/jtreg/vmTestbase/nsk/jdi/ThreadReference/stop
and I can see some evidence in our internal build/test systems that
they're still being run, so it looks like these interfaces are still
active. As you observe, they haven't been deprecated. There might even
be valid uses cases for stopping a thread this way in a debugging
situation that aren't valid for applications.
I'm yet to find one :) I pointed out this inconsistency many many years
ago but it remains.
I guess that means the thing to do is to update the documentation to
remove the reference to the soon-to-be-deleted Thread.stop(Throwable)
but otherwise leave this stuff unchanged.
Yep that's what I thought too.
Thanks,
David
s'marks