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

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