Hi,

Let's consider the following sequence.

-----------------------------> time

main     -----T------------
worker   --*E1**--*E2***---

T: Call TerminateExecution with the worker isolate (on the main thread)
E1: bottom-most script evaluation (* means running)
E2: bottom-most script evaluation (* means running)

In this case, E1 is terminated due to TerminateExecution, but E2 runs
normally (i.e., may return a non-empty value) because "the isolate is good
to be re-used again", right?

Another question: If E1 starts running after TerminateExecution is called,
what happens?

main     T-----------------
worker   --*E1**-----------

T: Call TerminateExecution with the worker isolate (on the main thread)
E1: bottom-most script evaluation (* means running)

Will E1 be aborted due to a past TerminateExecution call, or will it run
because "the isolate is good to be re-used again"?

Thanks,


On Mon, Nov 19, 2018 at 3:28 PM Yang Guo <yang...@chromium.org> wrote:

> Sorry. I should have been more explicit here. My image of the stack is
> growing bottom up. So A is the bottom-most V8 call.
>
> Yang
>
> On Mon, Nov 19, 2018 at 5:42 AM Yutaka Hirano <yhir...@chromium.org>
> wrote:
>
>> Hi,
>>
>> I found I don't understand the direction. If there are only two levels,
>> say blink-calls-v8(A)-calls-blink-calls-v8(B), which is the bottom-most v8
>> call, A or B?
>>
>> Thanks,
>>
>> On Fri, Nov 16, 2018 at 6:30 PM Yutaka Hirano <yhir...@chromium.org>
>> wrote:
>>
>>> Hi Yang,
>>>
>>> Thank you for the information!
>>> Sorry for the late response. I will send a reply next week.
>>>
>>> Thanks,
>>>
>>>
>>> On Thu, Nov 15, 2018 at 9:33 PM Kentaro Hara <hara...@chromium.org>
>>> wrote:
>>>
>>>> I found that at the only place Isolate::TerminateExecution is called
>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/workers/worker_thread.cc?type=cs&sq=package:chromium&g=0&l=415>
>>>>>  from
>>>>> blink, V8 is not even running. That would mean that we don't have to worry
>>>>> about any of this?
>>>>
>>>>
>>>> At that place the main thread (which is not running V8) is calling
>>>> TerminateExecution to terminate a running worker thread. The concern is on
>>>> the worker thread.
>>>>
>>>>
>>>> On Thu, Nov 15, 2018 at 6:51 PM Yang Guo <yang...@chromium.org> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> I found that at the only place Isolate::TerminateExecution is called
>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/workers/worker_thread.cc?type=cs&sq=package:chromium&g=0&l=415>
>>>>>  from
>>>>> blink, V8 is not even running. That would mean that we don't have to worry
>>>>> about any of this?
>>>>>
>>>>> Cheers,
>>>>>
>>>>> Yang
>>>>>
>>>>> On Wed, Nov 14, 2018 at 10:00 AM Yang Guo <yang...@chromium.org>
>>>>> wrote:
>>>>>
>>>>>> I filed a bug for the slightly counter-intuitive behavior I
>>>>>> mentioned: https://bugs.chromium.org/p/v8/issues/detail?id=8455
>>>>>>
>>>>>> Cheers,
>>>>>>
>>>>>> Yang
>>>>>>
>>>>>> On Wed, Nov 14, 2018 at 9:01 AM Yang Guo <yang...@chromium.org>
>>>>>> wrote:
>>>>>>
>>>>>>> When you terminate execution in V8, we abort execution until the
>>>>>>> bottom-most call into V8. If you have re-entries into V8, V8 always 
>>>>>>> returns
>>>>>>> empty results until the bottom-most call into V8. On the Blink side on 
>>>>>>> the
>>>>>>> stack of the re-entries, you can try to call into V8 before returning, 
>>>>>>> but
>>>>>>> that will simply return empty results. v8::TryCatch scopes along the way
>>>>>>> will return true for v8::TryCatch::HasCaught and
>>>>>>> v8::TryCatch::HasTerminated. Isolate::IsExecutionTerminating returns 
>>>>>>> true.
>>>>>>>
>>>>>>> As soon as we reach the bottom-most call, we return with an empty
>>>>>>> value as well. The v8::TryCatch scope around that will return true for
>>>>>>> v8::TryCatch::HasCaught and v8::TryCatch::HasTerminated, but
>>>>>>> Isolate::IsExecutionTerminating will return false (even if you are still
>>>>>>> inside this outer-most v8::TryCatch scope), because you can safely call
>>>>>>> into V8 again, from here on. I actually find this a bit 
>>>>>>> counter-intuitive,
>>>>>>> and it might be better to have Isolate::IsExecutionTerminating return 
>>>>>>> true,
>>>>>>> until we leave the outer-most v8::TryCatch. Though implementing that 
>>>>>>> seems
>>>>>>> a bit annoying.
>>>>>>>
>>>>>>> So what you are observing is that you have a non-reentry call to
>>>>>>> execute the worker. That terminates, and you then have another 
>>>>>>> non-reentry
>>>>>>> call. That is working as intended though. Once you have left V8 through
>>>>>>> termination across all re-entries, the isolate is good to be re-used 
>>>>>>> again.
>>>>>>> I think the correct way to fix your issue is to, at non-reentry calls, 
>>>>>>> *always
>>>>>>> check for v8::TryCatch::HasTerminated, and use that to guide the 
>>>>>>> following
>>>>>>> control flow*.
>>>>>>>
>>>>>>> To answer your questions:
>>>>>>>
>>>>>>>> 1. What happens if the isolate is forcibly terminated (from
>>>>>>>> another thread) while running a script? Will an exception be thrown? 
>>>>>>>> Is a
>>>>>>>> v8::TryCatch catches the exception?
>>>>>>>
>>>>>>> Internally we throw a special exception that cannot be caught by
>>>>>>> javascript. This exception causes execution to abort until we arrive at 
>>>>>>> the
>>>>>>> first (non-reentry) call into V8.
>>>>>>>
>>>>>>> 2. What happens if we try to run a script when the isolate has
>>>>>>>> already been terminated?
>>>>>>>
>>>>>>> If you completely exited V8 back to the first non-reentry call, you
>>>>>>> can safely use the isolate again.
>>>>>>>
>>>>>>> 3. What happens if v8 calls blink code, the isolate is forcibly
>>>>>>>> terminated and then the control is back to v8?
>>>>>>>
>>>>>>> The termination exception is propagated back to V8, causes the
>>>>>>> current execution to abort, so that we return an empty value to blink as
>>>>>>> soon as possible. If this blink frame is called from V8, then calling 
>>>>>>> into
>>>>>>> V8 will only result in empty values.
>>>>>>>
>>>>>>> Cheers,
>>>>>>>
>>>>>>> Yang
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Sat, Nov 10, 2018 at 12:15 AM Adam Klein <ad...@chromium.org>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> On Thu, Nov 8, 2018 at 8:21 PM Yutaka Hirano <yhir...@chromium.org>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> > As to the problem itself, I have a clarifying questions: doesn't
>>>>>>>>> Blink already have some choke point to determine whether it's "ok to 
>>>>>>>>> call
>>>>>>>>> script now"? If so that'd be a more natural place to add this 
>>>>>>>>> handling than
>>>>>>>>> TryCatch.
>>>>>>>>>
>>>>>>>>> No, there isn't such a point. To make matters worse, some
>>>>>>>>> call-sites don't check errors because they don't care.
>>>>>>>>>
>>>>>>>>> Sorry for the ignorance but I would like to know V8's policy on
>>>>>>>>> termination.
>>>>>>>>>
>>>>>>>>> 1. What happens if the isolate is forcibly terminated (from
>>>>>>>>> another thread) while running a script? Will an exception be thrown? 
>>>>>>>>> Is a
>>>>>>>>> v8::TryCatch catches the exception?
>>>>>>>>> 2. What happens if we try to run a script when the isolate has
>>>>>>>>> already been terminated?
>>>>>>>>> 3. What happens if v8 calls blink code, the isolate is forcibly
>>>>>>>>> terminated and then the control is back to v8?
>>>>>>>>>
>>>>>>>>>
>>>>>>>> I'm not intimately familiar with the details here. Yang or Toon,
>>>>>>>> perhaps you have more insight?
>>>>>>>>
>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Fri, Nov 9, 2018 at 5:30 AM Adam Klein <ad...@chromium.org>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Adding a couple more V8 folks who may have thoughts.
>>>>>>>>>>
>>>>>>>>>> On Thu, Nov 8, 2018 at 1:59 AM Kentaro Hara <hara...@chromium.org>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> On Thu, Nov 8, 2018 at 1:10 AM Yuki Shiino <
>>>>>>>>>>> yukishi...@chromium.org> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> +adamk, cbruni to get more attention from V8 team.  This needs
>>>>>>>>>>>> V8 team's support.
>>>>>>>>>>>>
>>>>>>>>>>>> Actually, I intended haraken's (a3) at my proposal (a), but I'm
>>>>>>>>>>>> afraid that changing an existing API HasCaught() would break 
>>>>>>>>>>>> backward
>>>>>>>>>>>> compatibility.  So, I'm also proposing to add a new V8 API like
>>>>>>>>>>>> v8::TryCatch::HasPendingException or 
>>>>>>>>>>>> v8::TryCatch::HasCaughtOrTerminated or
>>>>>>>>>>>> whatever we call it.
>>>>>>>>>>>>
>>>>>>>>>>>> By the way, the example code is just an example.  Usually we
>>>>>>>>>>>> don't have two TryCatch blocks next to each other, and Blink is 
>>>>>>>>>>>> rethrowing
>>>>>>>>>>>> the exception in most cases.  I just forgot to write rethrow in the
>>>>>>>>>>>> example.  That's not a point.  Let me revise the example.
>>>>>>>>>>>>
>>>>>>>>>>>> Main thread:
>>>>>>>>>>>>     v8::Isolate* worker_isolate = ...;
>>>>>>>>>>>>     worker_isolate->TerminateExecution();  // Terminates the
>>>>>>>>>>>> worker isolate.
>>>>>>>>>>>>
>>>>>>>>>>>> Worker thread (worker isolate):
>>>>>>>>>>>>     Foo();  // The v8::Isolate terminates during execution of
>>>>>>>>>>>> Foo.
>>>>>>>>>>>>     Bar();
>>>>>>>>>>>>
>>>>>>>>>>>> where Foo and Bar are the followings.
>>>>>>>>>>>>
>>>>>>>>>>>>     void Foo() {
>>>>>>>>>>>>       v8::TryCatch try_catch1(isolate);
>>>>>>>>>>>>       // Call V8 APIs.  The v8::Isolate gets terminated at this
>>>>>>>>>>>> point.
>>>>>>>>>>>>       if (try_catch1.HasCaught()) {  // => true due to the
>>>>>>>>>>>> termination exception.
>>>>>>>>>>>>         // Rethrow or report the error to global error handlers.
>>>>>>>>>>>>         return;
>>>>>>>>>>>>       }
>>>>>>>>>>>>     }
>>>>>>>>>>>>
>>>>>>>>>>>>     void Bar() {
>>>>>>>>>>>>       v8::TryCatch try_catch2(isolate);
>>>>>>>>>>>>       // Call V8 APIs.  V8 APIs fail because the isolate is
>>>>>>>>>>>> terminating.
>>>>>>>>>>>>       if (try_catch2.HasCaught()) {  // => false because no new
>>>>>>>>>>>> exception is thrown inside |try_catch2| scope.
>>>>>>>>>>>>         // Rethrow or report the error to global error handlers.
>>>>>>>>>>>>         return;
>>>>>>>>>>>>       }
>>>>>>>>>>>>       // Blink reaches here.  :(
>>>>>>>>>>>>     }
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Hmm, I'm a bit confused.
>>>>>>>>>>>
>>>>>>>>>>> If Foo() rethrows the exception, why does the worker thread
>>>>>>>>>>> continue execution and call Bar()? That will cause a problem even 
>>>>>>>>>>> when the
>>>>>>>>>>> worker is not terminated (because the worker continues execution 
>>>>>>>>>>> ignoring
>>>>>>>>>>> the thrown exception)...?
>>>>>>>>>>>
>>>>>>>>>>> Also I might want to understand how widely the problem is
>>>>>>>>>>> happening. First of all, it is not realistic to handle worker's 
>>>>>>>>>>> sudden
>>>>>>>>>>> termination in 100% cases (unless we add checks to all V8 API calls 
>>>>>>>>>>> in the
>>>>>>>>>>> Blink code base). So the best thing we can do is to insert the 
>>>>>>>>>>> termination
>>>>>>>>>>> check to places that may call scripts (e.g., V8ScriptRunner, 
>>>>>>>>>>> EventListener,
>>>>>>>>>>> Promise resolve / reject etc) and reduce the crash rate. We could 
>>>>>>>>>>> introduce
>>>>>>>>>>> HasCaughtOrTerminated() if it helps to reduce the crash rate, but I 
>>>>>>>>>>> want to
>>>>>>>>>>> make sure that assumption is correct. My intuition is that it will 
>>>>>>>>>>> be more
>>>>>>>>>>> useful to identify places that may call scripts often and insert the
>>>>>>>>>>> termination checks if missing.
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> I'd similarly like to understand how much this happens in
>>>>>>>>>> practice.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> A proposed solution looks like the following.
>>>>>>>>>>>>
>>>>>>>>>>>>     v8::TryCatch try_catch(isolate);
>>>>>>>>>>>>     // ...
>>>>>>>>>>>>     if (try_catch.*HasCaughtOrTerminated*()) {
>>>>>>>>>>>>       v8::Local<v8::Exception> exception = try_catch.
>>>>>>>>>>>> *CaughtExceptionOrTerminationException*();
>>>>>>>>>>>>       // Do a job with |exception|.
>>>>>>>>>>>>       return;
>>>>>>>>>>>>     }
>>>>>>>>>>>>
>>>>>>>>>>>> where HasCaughtOrTerminated returns true when the isolate is
>>>>>>>>>>>> terminating even if no exception is thrown inside the TryCatch 
>>>>>>>>>>>> scope, and
>>>>>>>>>>>> CaughtExceptionOrTerminationException returns a thrown exception 
>>>>>>>>>>>> if an
>>>>>>>>>>>> exception is thrown inside the TryCatch scope or the termination 
>>>>>>>>>>>> exception
>>>>>>>>>>>> if the isolate is terminating.
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>> As to the problem itself, I have a clarifying questions: doesn't
>>>>>>>>>> Blink already have some choke point to determine whether it's "ok to 
>>>>>>>>>> call
>>>>>>>>>> script now"? If so that'd be a more natural place to add this 
>>>>>>>>>> handling than
>>>>>>>>>> TryCatch.
>>>>>>>>>>
>>>>>>>>>> - Adam
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> Cheers,
>>>>>>>>>>>> Yuki Shiino
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> 2018年11月8日(木) 17:38 Kentaro Hara <hara...@chromium.org>:
>>>>>>>>>>>>
>>>>>>>>>>>>> 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
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> Kentaro Hara, Tokyo, Japan
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> 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/CABg10jx51JXHEt0H9z%3DzT%3D0GnhDf79QjhGtVxRc%3Dy-RXjHXUyw%40mail.gmail.com
>>>>>>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/platform-architecture-dev/CABg10jx51JXHEt0H9z%3DzT%3D0GnhDf79QjhGtVxRc%3Dy-RXjHXUyw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>>>>>>> .
>>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>> 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/CABihn6GKuTUs5UfpbQ6RwXq%3DWw0dDUJkq2JLzadnesfjLG%3DStg%40mail.gmail.com
>>>>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/platform-architecture-dev/CABihn6GKuTUs5UfpbQ6RwXq%3DWw0dDUJkq2JLzadnesfjLG%3DStg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>>>>> .
>>>>>>>>>
>>>>>>>> --
>>>>>>>> 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/CAEvLGcKKKdZ4-Svz7NmXdzSaL9ryQz4cPEqhTfmWEURzwTdMqQ%40mail.gmail.com
>>>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/platform-architecture-dev/CAEvLGcKKKdZ4-Svz7NmXdzSaL9ryQz4cPEqhTfmWEURzwTdMqQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>>>> .
>>>>>>>>
>>>>>>> --
>>>>> 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/CAFSTc_iBZUPpYMuUk3ouOe7cLBDizJFUjmcWuaAeVZfMBn4QqQ%40mail.gmail.com
>>>>> <https://groups.google.com/a/chromium.org/d/msgid/platform-architecture-dev/CAFSTc_iBZUPpYMuUk3ouOe7cLBDizJFUjmcWuaAeVZfMBn4QqQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>>
>>>>
>>>> --
>>>> 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.
>>>>
>>> --
>> 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/CABihn6H0_3BFq5S2wv5Y8CDyW%3Dv-HjwskH1Wds6PmTWX5akE9g%40mail.gmail.com
>> <https://groups.google.com/a/chromium.org/d/msgid/platform-architecture-dev/CABihn6H0_3BFq5S2wv5Y8CDyW%3Dv-HjwskH1Wds6PmTWX5akE9g%40mail.gmail.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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to