Ok, seems that I CAN call js functions from within RequestInterrupt, things 
seem to work.

I guess I'm confused what this means in that case: "Registered |callback| 
must not reenter interrupted Isolate."



On Monday, 21 April 2025 at 17:41:21 UTC+1 jmr wrote:

> I'm porting an application that is using SpiderMonkey for embedding, and I 
> have a few questions.
>
> One of the things my application does is, it allows user (in javascript) 
> to register for events:
>
> func handler(...) { {}
> registerEventHandler("evetName", handler);
>
> In C++, I then store these handlers to be called later once the event 
> arrives.
>
> Once the event arrives (different thread than isolate is running on), I 
> store it in a pending event list for the runtime (isolate), I then 
> call JS_RequestInterruptCallback which interrupts the execution of the 
> runtime (isolate), and drops into my C++ interrupt callback.
>
> From my C++ callback, I check for pending events, and call the user 
> provided functions (re-entering the isolate) delivering the events, and 
> resume execution to the user.
>
> Seems that with v8, I can get quite close to this, except 
> isolate->RequestInterrupt does not allow re-entering the isolate/calling 
> user code, making this not work.
>
> I tried using EnqueueMicrotask but seems those are never delivered 
> automatically unless the script stops, or I call PerformMicrotaskCheckpoint 
> (which then ends up on the wrong, calling thread)
>
> I tried posting a task to the platform 
> (platform->GetForegroundTaskRunner(isolate)->PostTask), but given the 
> script is long lived, I don't think this ever gets delivered.
>
> I tried using Locker(isolate) + Isolate::Scope(isolate) 
> + isolate->GetCurrentContext() from the event thread, and then calling the 
> callbacks, but this crashes non-deterministically, sometimes with "Invoke 
> in DisallowJavascriptExecutionScope".
>
> Any guidance is appreciated.
> Thanks.
>
>

-- 
-- 
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/12e0876e-96b5-451f-8c88-11b4c4d8efd3n%40googlegroups.com.

Reply via email to