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