diff --git a/mps/src/trace.c b/mps/src/trace.c index 56d94d38b9b..af5076f3dbd 100644 --- a/mps/src/trace.c +++ b/mps/src/trace.c @@ -1,6 +1,6 @@ /* impl.c.trace: GENERIC TRACER IMPLEMENTATION * - * $HopeName: MMsrc!trace.c(trunk.11) $ + * $HopeName: MMsrc!trace.c(trunk.12) $ */ #include "std.h" @@ -12,9 +12,10 @@ #include "pool.h" #include "root.h" #include "rootst.h" +#include "ld.h" #include -SRCID("$HopeName: MMsrc!trace.c(trunk.11) $"); +SRCID("$HopeName: MMsrc!trace.c(trunk.12) $"); Bool ScanStateIsValid(ScanState ss, ValidationType validParam) { @@ -71,6 +72,14 @@ Error TraceFlip(Space space, TraceId ti, RefSet condemned) AVER(trace->condemned == RefSetEmpty); trace->condemned = condemned; + /* Update location dependency structures. condemned is + * a conservative approximation of the refset of refs which + * may move during this collection. + * @@@@ It is too conservative. Not everything condemned will + * necessarily move. + */ + LDAge(space, condemned); + /* Grey all the roots and pools. */ deque = SpacePoolDeque(space);