I'm assuming tests with the proxy resolver and inspector related tests.
Both assume that we can resume after termination.

Adding a new API like you suggest indeed might make sense. We would set a
flag on the isolate which prevents us from clearing the termination
exception. Any opinions on this?

Cheers,

Yang

On Wed, Nov 28, 2018 at 8:25 AM Yuki Shiino <yukishi...@chromium.org> wrote:

> Hi Yang,
>
>
>> I could change V8 to not clear the termination exception so that we
>> always stay in the terminated mode and not recover. However, from
>> experience I expect tons of tests to fail if I implemented this change.
>>
>
> By the way, what are "tons of tests"?  Are they V8 tests? or Blink tests
> (web tests / layout tests)? or other embedder's tests?
>
> If they're not Blink tests, can we introduce a new API like
> Isolate::TerminateExecutionAndKeepExecutionTerminated?
>
>
> 2018年11月22日(木) 18:36 Yuki Shiino <yukishi...@chromium.org>:
>
>> What you could do is add a check after E1 for
>>>> v8::TryCatch::HasTerminated(), and schedule another
>>>> Isolate::TerminateExecution() if true. You would need to do this for E2 as
>>>> well, if you expect an E3, and so forth.
>>>>
>>> That might be possible by migrating
>>> ExceptionState.RethrowV8Exception(v8::Local<v8::Value>) to
>>> ExceptionState.RethrowV8Exception(v8::TryCatch&). yukishiino@, how hard
>>> would it be?
>>>
>>
>> Bindings is part of Blink.  "after E1" means "after Blink callback exits
>> back to V8", I think?  Then, there seems no chance for ExceptionState or
>> any bindings code to do it.
>>
>> Or, is it okay to call v8::Isolate::TerminateExecution() before Blink
>> exits back to V8?
>>
>> 2018年11月22日(木) 17:54 Yutaka Hirano <yhir...@chromium.org>:
>>
>>> On Thu, Nov 22, 2018 at 8:53 AM Kentaro Hara <hara...@chromium.org>
>>> wrote:
>>>
>>>> Would it be hard to make Blink immediately terminate the worker thread
>>>> after E1 is forcibly terminated?
>>>>
>>>> Blink is already doing that for common script execution paths e.g.,
>>>> event listeners, call functions etc.
>>>>
>>> Script execution is scattered in the code base so it's hard to guarantee
>>> that. Most of them are short-running, so the problem should be rare, but it
>>> will confuse us when the problem happens.
>>>
>>> On Thu, Nov 22, 2018 at 5:25 PM Yang Guo <yang...@chromium.org> wrote:
>>>
>>>> I could change V8 to not clear the termination exception so that we
>>>> always stay in the terminated mode and not recover. However, from
>>>> experience I expect tons of tests to fail if I implemented this change.
>>>>
>>> I was thinking of introducing a new option, but yes, changing the
>>> default behavior may impact tests and users other than blink.
>>>
>>>
>>>> What you could do is add a check after E1 for
>>>> v8::TryCatch::HasTerminated(), and schedule another
>>>> Isolate::TerminateExecution() if true. You would need to do this for E2 as
>>>> well, if you expect an E3, and so forth.
>>>>
>>> That might be possible by migrating
>>> ExceptionState.RethrowV8Exception(v8::Local<v8::Value>) to
>>> ExceptionState.RethrowV8Exception(v8::TryCatch&). yukishiino@, how hard
>>> would it be?
>>>
>>>
>>> On Thu, Nov 22, 2018 at 5:25 PM Yang Guo <yang...@chromium.org> wrote:
>>>
>>>> I could change V8 to not clear the termination exception so that we
>>>> always stay in the terminated mode and not recover. However, from
>>>> experience I expect tons of tests to fail if I implemented this change.
>>>>
>>>> What you could do is add a check after E1 for
>>>> v8::TryCatch::HasTerminated(), and schedule another
>>>> Isolate::TerminateExecution() if true. You would need to do this for E2 as
>>>> well, if you expect an E3, and so forth.
>>>>
>>>> Cheers,
>>>>
>>>> Yang
>>>>
>>>> On Thu, Nov 22, 2018 at 8:53 AM Kentaro Hara <hara...@chromium.org>
>>>> wrote:
>>>>
>>>>> Would it be hard to make Blink immediately terminate the worker thread
>>>>> after E1 is forcibly terminated?
>>>>>
>>>>> Blink is already doing that for common script execution paths e.g.,
>>>>> event listeners, call functions etc.
>>>>>
>>>>>
>>>>> On Thu, Nov 22, 2018 at 4:34 PM Yutaka Hirano <yhir...@chromium.org>
>>>>> wrote:
>>>>>
>>>>>> Thanks for the reply.
>>>>>>
>>>>>> As Kentaro said, Blink uses TerminateExecution only when it tries to
>>>>>> terminate a worker thread forcibly. The isolation will soon be disposed,
>>>>>> and the "recovering" functionality is actually harmful for us.
>>>>>>
>>>>>> 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, the main thread wants to terminate the worker thread,
>>>>>> but it calls TerminateExecution only once so it E2 runs potentially 
>>>>>> forever.
>>>>>> If there is an option that ensures that future v8 calls will fail
>>>>>> whenever possible and the v8::TryCatch scope around that will return
>>>>>> true for v8::TryCatch::HasCaught, then we'll be happy. Is it possible?
>>>>>>
>>>>>>
>>>>>> On Mon, Nov 19, 2018 at 7:27 PM Yutaka Hirano <yhir...@chromium.org>
>>>>>> wrote:
>>>>>>
>>>>>>> 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>
>>>>>>>>> .
>>>>>>>>>
>>>>>>>> --
>>>>>> 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/CABihn6F4PfQJML_kNgt5Et2nhfQfVBuXYqaNyHyORAGtbVbEjg%40mail.gmail.com
>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/platform-architecture-dev/CABihn6F4PfQJML_kNgt5Et2nhfQfVBuXYqaNyHyORAGtbVbEjg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> 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/CABg10jz-oO0wE0ZGzdZ8%3DuXdZdj7UvR_KKG_12%2B_-67-LA_2Cw%40mail.gmail.com
>>>>> <https://groups.google.com/a/chromium.org/d/msgid/platform-architecture-dev/CABg10jz-oO0wE0ZGzdZ8%3DuXdZdj7UvR_KKG_12%2B_-67-LA_2Cw%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/CAN0uC_Q%3Da8RqGpskEyJP-8voXk%3Dq_hPJxvyaxAnowFo1AC2LYw%40mail.gmail.com
> <https://groups.google.com/a/chromium.org/d/msgid/platform-architecture-dev/CAN0uC_Q%3Da8RqGpskEyJP-8voXk%3Dq_hPJxvyaxAnowFo1AC2LYw%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