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