Looks like the API doesn't currently expose that functionality, you'd have to add it. Something like (untested):
// Returns true if a pending termination request was found and handled. bool v8::Isolate::HandleTerminationRequests() { i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(this); StackLimitCheck check(i_isolate); if (check.InterruptRequested() && i_isolate->stack_guard()->HasTerminationRequest()) { i_isolate->TerminateExecution(); return true; } return false; } The return value is useful if your code is currently in the middle of an expensive operation (such as a loop) from which it can return early. Or you can just use the extra function call on the JS side, that's certainly easier and probably fast enough (even for a tight rendering loop). On Wed, Jul 30, 2025 at 10:27 AM jmr <audrius.butkevic...@gmail.com> wrote: > How do I check in my own native code if termination is happening, and how > do I throw the uncatchable error? > IsTerminating seems to return false on the exit of my native call, and > yes, I can throw an error, but not one that cannot be caught > > On Tuesday, 29 July 2025 at 13:22:39 UTC+1 Jakob Kummerow wrote: > >> This an optimization: if a loop contains a call, it doesn't need to emit >> its own stack checks in order to support interrupt requests, because the >> callee will contain a stack check. >> So you can add an interrupt check to your native code that you're calling. >> It *might* be feasible to fix this on the V8 side by checking if the >> call's target is known to be a non-JS function... not sure. >> >> (FWIW, the specific given example is a bit unconvincing: a "tight >> rendering loop" that "native_sleep(1000)"s all the time can certainly take >> the minuscule overhead of a function call.) >> >> >> On Tue, Jul 29, 2025 at 9:47 AM jmr <audrius.b...@gmail.com> wrote: >> >>> Hi, >>> >>> I've got code as follows in js: >>> >>> while (true) { native_sleep(1000); } >>> >>> Effectively js keeps leaving and re-entering native code repeatedly >>> without affecting it's own stack. I noticed that in a situation like this >>> TerminateExecution simply does not work. >>> >>> If I change my code to: >>> >>> func js_sleep(arg) { native_sleep(arg); } >>> while (true) { js_sleep(1000); } >>> >>> Then it works, but this adds an unnecessary js stackframe, which for a >>> tight rendering loop might not be great. >>> >>> Is there a way to propagate termination without an extra js frame >>> somehow? >>> I.e., could the termination checks be done when entering/leaving native >>> calls? >>> Can I somehow force the propagation to kick in once I'm leaving my >>> native call? >>> >>> Thanks. >>> >>> -- >>> -- >>> v8-users mailing list >>> v8-u...@googlegroups.com >>> http://groups.google.com/group/v8-users >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "v8-users" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to v8-users+u...@googlegroups.com. >>> To view this discussion visit >>> https://groups.google.com/d/msgid/v8-users/2c2b769d-d599-4493-a459-2f05da527cadn%40googlegroups.com >>> <https://groups.google.com/d/msgid/v8-users/2c2b769d-d599-4493-a459-2f05da527cadn%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- > -- > v8-users mailing list > v8-users@googlegroups.com > http://groups.google.com/group/v8-users > --- > You received this message because you are subscribed to the Google Groups > "v8-users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to v8-users+unsubscr...@googlegroups.com. > To view this discussion visit > https://groups.google.com/d/msgid/v8-users/950f397f-0fe2-4acc-96a6-2b7694befdc2n%40googlegroups.com > <https://groups.google.com/d/msgid/v8-users/950f397f-0fe2-4acc-96a6-2b7694befdc2n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- -- v8-users mailing list v8-users@googlegroups.com http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-users+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/v8-users/CAKSzg3TgDEvyQVk9wrApmN3qSnhHzZPz%3DvLF9tmwvmZKQhbr5g%40mail.gmail.com.