RFR: 8289613: Drop use of Thread.stop in jshell
Adam Sotona
asotona at openjdk.org
Mon Sep 5 14:44:56 UTC 2022
On Mon, 5 Sep 2022 13:18:08 GMT, Alan Bateman <alanb at openjdk.org> wrote:
>> LocalExecutionControl in jdk.jshell actually uses Thread::stop to cancel execution of (long-running or infinite loops) user code in JShell, however Thread::stop is deprecated and planned for removal.
>>
>> Proposed patch instruments all user code to call LocalExecutionControl::stopCheck method before every branch instruction.
>> Thread::stop call is replaced by setting global field LocalExecutionControl.allStop to true and stopCheck method then throws ThreadDead when called from the instrumented code.
>>
>> Proposed patch requires jdk.jshell access to java.base jdk.internal.org.objectweb.asm package.
>>
>> Please review.
>>
>> Thanks,
>> Adam
>
> This is the last usage of Thread.stop in the JDK so this change is welcome.
>
> The instrumentation to check a flag at jump instrumentation looks reasonable, and works here because the method is public on a public class in an exported package. I hadn't noticed that jdk.jshell.execution is exported and the addition to LocalExecutionControl means it's a new API so I assume forces you to write javadoc.
>
> If a user presses control-C in jshell does it also interrupt the thread or will it just set the stop flag? If it also interrupts then you have another choice to check the interrupt status (assumes all code is well behaved of course).
>
> Is there one or many LocalExecutionControl objects when I execute a snippet, control-C, execute another? I'm wondering because the allStop flag is static but STOP_LOCK is per instance.
I think @AlanBateman proposal to monitor interrupted status is easy to implement and also does not require a new public method nor synthetic class.
-------------
PR: https://git.openjdk.org/jdk/pull/10166
More information about the core-libs-dev
mailing list