Per-generation lists of weak pointers
tkn.akio at gmail.com
Mon Mar 11 13:15:23 CET 2013
Thank you for your reply!
On Mon, Mar 11, 2013 at 8:17 PM, Edward Z. Yang <ezyang at mit.edu> wrote:
> I was under the impression that foreign pointers finalizers were only
> ordered with respect to multiple finalizers on a single object. So if
> you can show your implementation preserves same-object ordering, that
> should be sufficient. (Nota bene: I haven't CR'd your code.)
Yes I understand that. However my understanding is that
addForeignPtrFinalizer creates a fresh WEAK object with just one
finalizer. So in order to maintain the same-object ordering of C
finalizers, I still somehow need to deal with ordering between
multiple WEAK objects.
> Excerpts from Akio Takano's message of Mon Mar 11 03:17:48 -0700 2013:
>> I'm working on implementing per-generation lists of weak pointers to
>> speed up garbage collection in programs that allocate a lot of weak
>> pointers. I have a patch  that validates and gives a 3x speed up on
>> a benchmark. However I'd like to ask for some advise before finishing
>> and submitting the patch.
>>  https://github.com/takano-akio/ghc/commit/c7345c68eaa1e7f9572e693b5e352e386df7d680
>> The problem is that since my patch splits the weak pointer list
>> between generations, it no longer maintains the right order of weak
>> pointers. This could cause finalizers added with
>> addForeignPtrFinalizer to run in the wrong order.
>> I can think of one way to fix it; to make sure that when a WEAK object
>> gets promoted, it is always added to the front of the new list. So my
>> questions are:
>> - Would it be a correct fix?
>> - If so, is it an acceptable fix? For example, is it too fragile a
>> reasoning to rely on?
>> Thank you in advance,
>> Takano Akio
More information about the ghc-devs