Hi V8-team and platform-architecture-dev,

TL;DR: We'd like to extend v8::TryCatch APIs a little.

We're having an issue how to handle worker termination, i.e. v8::Isolate
termination.  Roughly speaking, the situation is like below.

Main thread:
    v8::Isolate* worker_isolate = ...;
    worker_isolate->TerminateExecution();  // Terminates the worker isolate.

Worker thread (worker isolate):
    v8::TryCatch try_catch(isolate);
    DoSomethingWithV8();  // The Isolate terminates here.
    if (try_catch.HasCaught()) {  // => true due to termination
      // Handle error or termination.
      return;
    }

No problem so far.  Worker thread MUST NOT run any V8 code no longer
because the Isolate is terminating.  However, Blink is not perfect, and
it's pretty tough for Blink to stop everything with 100% correctness.
Occasionally (or rarely) Blink continues running more V8 code like below.

Worker thread (worker isolate):
    v8::TryCatch try_catch(isolate);
    DoSomethingElseWithV8();
    if (try_catch.HasCaught()) {  // => false because no new exception is
thrown inside the v8::TryCatch.
      return;  // Blink doesn't reach here.
    }
    // Blink reach here instead.  :(

If v8::TryCatch::HasCaught() returned true, Blink would be able to handle
it as error and Blink would work much better than now (Blink is now
crashing).

So, proposals here are something like below (not yet so concrete).

a) Make v8::TryCatch::HasCaught() return true if there already exists a
pending exception.  (Maybe this is no good.)
b) Make a new API like v8::TryCatch::HasPendingException() and make it
return true.  Blink rewrites all HasCaught() to the new one.

Similarly,

a2) Make v8::TryCatch::Exception() return a pending exception if there
already exists.
b2) Make a new API like v8::TryCatch::PendingException() and make it return
a thrown exception or pending exception in the isolate if any.  Blink
rewrites all Exception() to the new one.

What do you think of the issue and proposals?

Cheers,
Yuki Shiino

-- 
-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to