guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: out-of-order GC


From: Marius Vollmer
Subject: Re: out-of-order GC
Date: 01 Jan 2003 22:22:21 +0100
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2

Egil Moeller <address@hidden> writes:

> >    Fortunately, resource smobs can check, in their free functions,
> >    whether this has happened, by looking at the SCM_TYP16 of their
> >    reference to the display smob.  If the display smob is still valid,
> >    this will be scm_tc16_xdisplay, and the relevant X resource should
> >    be freed as normal.  If the display smob has been freed earlier in
> >    this sweep, GC will have set its SCM_TYP16 to scm_tc_free_cell;
> >    this indicates that XCloseDisplay has already been called, and so
> >    the relevant X resource no longer needs to be freed. */
> 
> Aha, so that's how it should be done.

Hmm. I think it would be better not to rely on this detail of how the
GC works.  I don't think we want to guarantee that you can always tell
whether a particular cell has been freed during this GC.  For example,
we might change the GC so that it gives heap segments back to the OS
when all their cells are on a freelist.  These cells are then `off
limits' to the application.  Or the GC might play tricks with the MMU
and make free cells write-only...

You could simply use scm_tc_free_cell anyway, being prepared to find a
new solution when your hack stops working, or you could add a
reference count to the C connection struct and point directly to it
from the C transaction object.  The connection could then stay around
long enough.  There are probably other solutions as well.

-- 
GPG: D5D4E405 - 2F9B BCCC 8527 692A 04E3  331E FAF8 226A D5D4 E405



reply via email to

[Prev in Thread] Current Thread [Next in Thread]