This is the mail archive of the guile@cygnus.com mailing list for the guile project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
The following small patch to guardians.c will help if applied together with Greg's patch, as Greg's patch breaks guardians. My fault, actually - there weren't any convenient SCM_SETGCMARK calls to grep for in there, I just OR'ed with 1. BTW, folks, you probably want to watch out for SCM_SETOR_CDR calls - guess what they are handy for ;). thanks, mike. *** libguile/guardians.c.old Mon Jan 4 21:44:51 1999 --- libguile/guardians.c Mon Jan 4 21:42:37 1999 *************** *** 223,230 **** if (SCM_FALSEP (prev_pair)) GUARDIAN_LIVE (g).head = next_pair; else ! /* mark previous pair */ ! SCM_SETCDR (prev_pair, next_pair | 1); /* to the zombie list! */ TCONC_IN (GUARDIAN_ZOMBIES (g), SCM_CAR (pair), pair); --- 223,229 ---- if (SCM_FALSEP (prev_pair)) GUARDIAN_LIVE (g).head = next_pair; else ! SCM_SETCDR (prev_pair, next_pair); /* to the zombie list! */ TCONC_IN (GUARDIAN_ZOMBIES (g), SCM_CAR (pair), pair); *************** *** 232,249 **** else { if (SCM_NFALSEP (prev_pair)) ! /* mark previous pair */ ! SCM_SETCDR (prev_pair, pair | 1); prev_pair = pair; } pair = next_pair; } if (SCM_NFALSEP (prev_pair)) ! /* mark previous pair */ ! SCM_SETCDR (prev_pair, pair | 1); /* mark live list tail */ ! SCM_SETOR_CDR (tconc_tail, 1); scm_gc_mark (GUARDIAN_ZOMBIES (g).head); } --- 231,249 ---- else { if (SCM_NFALSEP (prev_pair)) ! SCM_SETCDR (prev_pair, pair); ! ! SCM_SETGCMARK (pair); prev_pair = pair; } pair = next_pair; } if (SCM_NFALSEP (prev_pair)) ! SCM_SETCDR (prev_pair, pair); ! /* mark live list tail */ ! SCM_SETGCMARK (tconc_tail); scm_gc_mark (GUARDIAN_ZOMBIES (g).head); }