
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.) Edward Excerpts from Akio Takano's message of Mon Mar 11 03:17:48 -0700 2013:
Hi,
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 [1] 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.
[1] https://github.com/takano-akio/ghc/commit/c7345c68eaa1e7f9572e693b5e352e386d...
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