RFR: 8289613: Drop use of Thread.stop in jshell [v3]

Adam Sotona asotona at openjdk.org
Tue Sep 6 06:27:39 UTC 2022


On Mon, 5 Sep 2022 19:23:30 GMT, Adam Sotona <asotona 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
>
> Adam Sotona has updated the pull request incrementally with two additional commits since the last revision:
> 
>  - allStop field and stopCheck method moved to synthetic REPL.$Cancel$
>  - Revert "alternative implementation where instrumented code is directly checking Thread::interrupted"
>    
>    This reverts commit 0f0e0dd17c121955e7806073bb8cc78da1f133ea.

The latest version combines all comments. It instruments user code, delegates "allStop" to generated REPL.$Cancel$ class (loaded by specific LoaderDelegate), triggers REPL.$Cancel$.allStop and also interrupts all related threads to wake them up.

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

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


More information about the core-libs-dev mailing list