Terminate running script thread

Remi Forax forax at univ-mlv.fr
Sat Feb 27 19:46:54 UTC 2021


----- Mail original -----
> De: "Attila Szegedi" <szegedia at gmail.com>
> À: "Viktor Remennik" <bbiktop at gmail.com>
> Cc: "nashorn-dev" <nashorn-dev at openjdk.java.net>
> Envoyé: Samedi 27 Février 2021 18:07:55
> Objet: Re: Terminate running script thread

Hi,

> No, there’s no support for that. Nashorn compiles all scripts to JVM bytecode
> and runs them as such. There’s no more of a way to stop that code than any Java
> code. Even if there was some other way, I don’t see how would stopping a thread
> be materially better than what Thread#stop provides. I’m not saying there’s no
> better way, I’m just saying I don’t see it. I’m open to suggestion on how could
> a different mechanism be better.
> 
> I can imagine that if someone wanted something like this, they could implement a
> ClassFileTransformer and transform the bytecode to maybe add a check for some
> variable on the back edges of all loops? That’d help with infinite loops in
> Java code invoked from scripts as well. Of course, if the variable isn’t
> global, then you’d need to pass it around, or retrieve it from a thread local,
> which could be expensive (you could add a local variable for every loop to
> count and only check the thread local every 1000 iterations?) And again, how
> would the behavior of acting on the “stop” flag be different than a stack
> unwind through a ThreadDeath?
> 
> Lots of questions, but I’m happy to listen and discuss.

Loom has a mechanism to preempt a coroutine
https://download.java.net/java/early_access/loom/docs/api/java.base/java/lang/Continuation.html#tryPreempt(java.lang.Thread)

It uses the safepoint mechanism already present in the VM.
So if you run on a pool of virtual threads and ask gently, it may work.

> 
> Attila.

Rémi

> 
> 
>> On 2021. Feb 27., at 14:53, Viktor Remennik <bbiktop at gmail.com> wrote:
>> 
>> Is there already a way to terminate a running script? I found some old
>> discussions and articles regarding it, is there any progress these days? It
>> would be great to have something like CompiledScript#stop or something like
>> interrupt handler inside the Nashorn eval, because currently I have to use
>> Thread#stop with all its disadvantages and problems. I have user defined
>> scripts running in my application, users are technicians but still could make a
>> mistakes, so I'd like to control the script execution time and kill scripts
>> threads if configured maximum execution time limit has been exceeded. As
>> Nashorn is standalone now, I suppose I, or maybe someone more experienced in
>> Nashorn's internals, could try to implement this, but I'd like to check first,
>> isn't it is already implemented.
>> 
>> https://stackoverflow.com/questions/24855182/interrupt-java-thread-running-nashorn-script
>> <https://stackoverflow.com/questions/24855182/interrupt-java-thread-running-nashorn-script>
>> http://blog.getsandbox.com/2018/01/15/nashorn-interupt/
>> <http://blog.getsandbox.com/2018/01/15/nashorn-interupt/>
>> 
>> 
>> Thank you
>> 
> > Viktor


More information about the nashorn-dev mailing list