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>
>>>> .
>>>>
>>>

-- 
-- 
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