Den 5/9/2015 17:44, Kentaro Hara skreiv:
> It only handles a subset of these lazy sweeping instabilities though,
>
> -
https://code.google.com/p/chromium/issues/detail?id=485913
> -
https://code.google.com/p/chromium/issues/detail?id=485843
>
>
> are two others. The latter one is especially problematic, as it puts
> into question how we can reliably allow (or prevent) handing out
> "client" heap references from Blink to the embedder, for the embedder
> to call until some protocol revokes the reference when the client (or
> its owner) is destructed.
>
> Upon invocation of each of its methods by the embedder, the client
> abstraction will need to check if the object is about to be swept and
> abort the call, if it is. That's brittle, but aggressively using
> persistents (by way of WebPrivatePtr<>s, perhaps) will lead to leak
> problems also. I hope we can find something workable.
>
>
> Just help me understand: In the latter bug, how is the problem avoided
> on oilpan bulids? I'm wondering why the problem occurs only on
> non-oilpan builds.
I think it comes down to not having fuzzers running Oilpan enabled
builds, and other testing beyond layout tests.
>
> I'm getting to understand that this is a hard problem. I need some time
> to think about our next steps.
>
> Just a random idea, but would it be helpful to disable lazy sweeping for
> selected classes? For example, we can synchronously sweep Timers and
> ActiveDOMObjects (the sweeping happens just after the marking phase
> before resuming the mutator).
>
I've been thinking along similar lines -- have certain objects assigned
to 'eagerly swept' heaps, as it would avoid instrumenting
implementations with Heap::willObjectBeLazilySwept() checks. But unless
timers are on the heap, and it is not in other cases too tricky to
identify what objects need to be eagerly swept, I'm not sure it will
make things simpler. But worth thinking about some more.
--sigbjorn