unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
* smob mark functions in 2.0
@ 2011-11-23 21:20 Andy Wingo
  2011-11-23 23:12 ` Ludovic Courtès
  2011-11-30 15:29 ` Mark H Weaver
  0 siblings, 2 replies; 7+ messages in thread
From: Andy Wingo @ 2011-11-23 21:20 UTC (permalink / raw)
  To: guile-user

Hello all,

I don't know how you feel, but for me the BDW garbage collector used in
Guile 2.0 has made my life much easier than it was.  You typically don't
have to write SMOB marking functions any more.

However, I just fixed a bug in g-wrap that was a bit surprising to me.
If you do implement a SMOB marking function, and you touch Scheme
objects in that marking function, you need to be very careful.

Specifically, there is a warning in gc/gc_mark.h:

    /* WARNING: Such a mark procedure may be invoked on an unused object    */
    /* residing on a free list.  Such objects are cleared, except for a     */
    /* free list link field in the first word.  Thus mark procedures may    */
    /* not count on the presence of a type descriptor, and must handle this */
    /* case correctly somehow.                                              */

So, your mark function might see freed objects.  This is terrible, but
it is the way that it is.  The key is that, if you touch a Scheme object
in your mark function, to first do a check on that object, to see that
it is valid.  You can check the TC bits of the first word, or otherwise
check that other words are non-NULL.

Caveat mercator!

Andy
-- 
http://wingolog.org/



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-09-27 15:29 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-23 21:20 smob mark functions in 2.0 Andy Wingo
2011-11-23 23:12 ` Ludovic Courtès
2011-11-24 10:56   ` Andy Wingo
2011-11-24 23:24     ` Ludovic Courtès
2011-11-30 15:29 ` Mark H Weaver
2014-09-26  4:50   ` Mark H Weaver
2014-09-27 15:29     ` Andy Wingo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).