Re: [Gc] [PATCH] Allow registration of disappearing links on non-heapobjects

Ivan Maidanski ivmai at mail.ru
Sat Jan 31 11:24:30 PST 2009


Hi!

ludo at gnu.org (Ludovic CourtХs) wrote:
> Hello,
>
> In 7.1, registering disappearing links on non-heap objects leads to a
> segmentation fault as illustrated with this program:
>...
>     GC_GENERAL_REGISTER_DISAPPEARING_LINK (&link, (void *) &foo);
>     GC_gcollect ();  /* <-- triggers the segfault */
>...
>
> The attached patch fixes the problem.  However, I'm not sure whether
> that behavior was actually on purpose; if it was, it should be
> documented rather than patched.  (I haven't checked whether this area
> has changed in CVS.)
>
> Thanks,
> Ludo'.

This is not a bug, it's the known behavior - see the comment for GC_general_register_disappearing_link() in gc.h: "Obj MUST be a pointer to the first word of an object we ALLOCATED".
I fact, I ran into this problem too - see http://www.hpl.hp.com/hosted/linux/mail-archives/gc/2008-October/002400.html.
This had 2 consequences:
- for GC: addition of GC_ASSERT clause to GC_general_register_disappearing_link();
- for me: I added GC_base(obj) != NULL check before calling GC_general_register_disappearing_link() where obj could be a non-heap one.

So, Your patch is not needed now (and it's not quite correct) - simply get the latest CVS snapshot (or my tarball from the previous post) and compile GC with GC_ASSERTIONS (and You'd get assertion in the right place ;).

PS. GC_register_finalizer_...() allows non-heap objects (it simply ignores such ones) and it's documented in "gc.h".

Bye.


More information about the Gc mailing list