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.

Reply via email to