/* -----------------------------------------------------------------------------
- * $Id: GC.c,v 1.124 2001/10/17 15:19:24 simonmar Exp $
+ * $Id: GC.c,v 1.125 2001/10/19 09:41:11 sewardj Exp $
*
* (c) The GHC Team 1998-1999
*
static void scavenge_static ( void );
static void scavenge_mutable_list ( generation *g );
static void scavenge_mut_once_list ( generation *g );
-static void scavengeCAFs ( void );
#if 0 && defined(DEBUG)
static void gcCAFs ( void );
}
}
- scavengeCAFs();
+ /* follow roots from the CAF list (used by GHCi)
+ */
+ evac_gen = 0;
+ markCAFs(mark_root);
/* follow all the roots that the application knows about.
*/
}
void
-scavengeCAFs( void )
+markCAFs( evac_fn evac )
{
StgIndStatic *c;
- evac_gen = 0;
for (c = (StgIndStatic *)caf_list; c != NULL;
c = (StgIndStatic *)c->static_link)
{
- c->indirectee = evacuate(c->indirectee);
+ evac(&c->indirectee);
}
}
/* -----------------------------------------------------------------------------
- * $Id: GCCompact.c,v 1.9 2001/08/14 13:40:09 sewardj Exp $
+ * $Id: GCCompact.c,v 1.10 2001/10/19 09:41:11 sewardj Exp $
*
* (c) The GHC Team 2001
*
// the stable pointer table
threadStablePtrTable((evac_fn)thread);
+ // the CAF list (used by GHCi)
+ markCAFs((evac_fn)thread);
+
// 2. update forward ptrs
for (g = 0; g < RtsFlags.GcFlags.generations; g++) {
for (s = 0; s < generations[g].n_steps; s++) {
/* -----------------------------------------------------------------------------
- * $Id: StoragePriv.h,v 1.17 2001/08/08 10:50:37 simonmar Exp $
+ * $Id: StoragePriv.h,v 1.18 2001/10/19 09:41:11 sewardj Exp $
*
* (c) The GHC Team, 1998-1999
*
/* Functions from GC.c
*/
-void threadPaused(StgTSO *);
-StgClosure *isAlive(StgClosure *p);
+extern void threadPaused ( StgTSO * );
+extern StgClosure * isAlive ( StgClosure *p );
+extern void markCAFs ( evac_fn evac );
#endif /* STORAGEPRIV_H */