[Gc] Patch resubmission: correct GC_oom_fn usage in finalize.c
ivmai at mail.ru
Fri Sep 11 04:52:45 PDT 2009
This patch (ivmai128.diff), superseding diff62 and diff66 partly [Apr 11], fixes the following bug in GC_general_register_disappearing_link() and GC_register_finalizer_inner(): if GC_oom_fn() succeeds then (after gaining the lock again) the hash table index should be recalculated (since the table may grow) and the entry should be searched in the table again (to prevent adding a duplicate one).
Also, if GC_register_finalizer_inner() fails (because of lack of memory) then *ocd and *ofn shouldn't be modified.
The patch also changes (for convenience) error codes returned by GC_register_finalizer_inner() with public GC_SUCCESS, GC_DUPLICATE and GC_NO_MEMORY macros.
* finalize.c (GC_general_register_disappearing_link): Return
GC_SUCCESS, GC_DUPLICATE, GC_NO_MEMORY (instead of 0, 1 and 2,
* include/gc.h (GC_NO_MEMORY): New macro (defined as 2).
* include/gc.h (GC_register_disappearing_link,
GC_general_register_disappearing_link): Update the comment.
* typd_mlc.c (GC_calloc_explicitly_typed): Use GC_NO_MEMORY macro.
* finalize.c (GC_general_register_disappearing_link,
GC_register_finalizer_inner): Recalculate the hash table index
after GC_oom_fn succeeded (since the table may grow while not
holding the lock) and check again that the entry is still not in
the table (free the unused entry otherwise unless DBG_HDRS_ALL).
* finalize.c (GC_register_finalizer_inner): Initialize "hhdr"
local variable (to prevent a compiler warning).
* finalize.c (GC_register_finalizer_inner): Don't modify the data
pointed by "ocd" and "ofn" in GC_register_finalizer_inner() failed
(due to out of memory).
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 9450 bytes
Desc: not available
Url : http://napali.hpl.hp.com/pipermail/gc/attachments/20090911/ab836505/ivmai128.obj
More information about the Gc