On Mon, 5 Sep 2022 15:53:32 GMT, Adam Sotona <asot...@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
>
> Adam Sotona has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   alternative implementation where instrumented code is directly checking 
> Thread::interrupted

LocalExecutionControl.stop invoking Thread::interrupt is good as that will 
cause any interruptible methods to wakeup.

I'm less sure about instrumenting every "if" and "goto" to invoke 
Thread::interrupted but more recent comment suggests are going back to a stop 
field that polled by code in a generated class so I'll wait until you are done.

-------------

PR: https://git.openjdk.org/jdk/pull/10166

Reply via email to