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