On Mon, 5 Sep 2022 19:23:30 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 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