Thanks, I got it :) My proposal would be:
(a3) Make HasCaught() return true when the isolate is terminated. I'm not sure if (a) or (a2) is a good idea because the fact that we didn't call ReThrow() means that we (intentionally) suppressed the exception. Thoughts? On Wed, Nov 7, 2018 at 9:51 PM Yuki Shiino <yukishi...@chromium.org> wrote: > Are you assuming that the worker is terminated while it's calling >> DoSomethingElseWithV8()? If yes, why does HasCaught() not return true? If >> no, what's a problem of continuing execution? > > > No, the worker is terminated while DoSomethingWithV8 (without "Else"), and > Blink continues running more V8 code at DoSomethingElseWithV8. Two pieces > of code run consecutively. > > 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; > } > } > { > v8::TryCatch try_catch(isolate); > DoSomethingElseWithV8(); // V8 APIs fail because the Isolate is > terminating. > 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. :( > } > > IIUC, the second try_catch.HasCaught() doesn't return true because there > is no new exception thrown inside the v8::TryCatch scope, although V8 APIs > fail inside DoSomethingElseWithV8 due to a pending termination exception. > > Cheers, > Yuki Shiino > > > 2018年11月8日(木) 3:18 Kentaro Hara <hara...@chromium.org>: > >> Sorry, I'm not sure if I understand your example... >> >> >> On Wed, Nov 7, 2018 at 2:21 AM Yutaka Hirano <yhir...@chromium.org> >> wrote: >> >>> +ricea@ >>> >>> On Wed, Nov 7, 2018 at 6:44 PM Yuki Shiino <yukishi...@chromium.org> >>> wrote: >>> >>>> 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). >>>> >>> >> Are you assuming that the worker is terminated while it's calling >> DoSomethingElseWithV8()? If yes, why does HasCaught() not return true? If >> no, what's a problem of continuing execution? >> >> >> >>>> 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 >>>> >>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "platform-architecture-dev" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to platform-architecture-dev+unsubscr...@chromium.org. >>> To post to this group, send email to >>> platform-architecture-...@chromium.org. >>> To view this discussion on the web visit >>> https://groups.google.com/a/chromium.org/d/msgid/platform-architecture-dev/CABihn6ER8q9QABC3ROCSkm6V4w%2BDb0xEqRvjgzwBpMG9DmiG1Q%40mail.gmail.com >>> <https://groups.google.com/a/chromium.org/d/msgid/platform-architecture-dev/CABihn6ER8q9QABC3ROCSkm6V4w%2BDb0xEqRvjgzwBpMG9DmiG1Q%40mail.gmail.com?utm_medium=email&utm_source=footer> >>> . >>> >> >> >> -- >> Kentaro Hara, Tokyo, Japan >> > -- Kentaro Hara, Tokyo, Japan -- -- 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.