From 3940bd5b84ec41f91f784573c0b0e02bfa2f8bc9 Mon Sep 17 00:00:00 2001 From: Araq Date: Thu, 22 Aug 2013 19:20:45 +0200 Subject: [PATCH] GC: added static cycleGC checks --- lib/system/gc.nim | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/system/gc.nim b/lib/system/gc.nim index cb264fe0d0..36c008bef5 100644 --- a/lib/system/gc.nim +++ b/lib/system/gc.nim @@ -173,9 +173,10 @@ proc rtlAddCycleRoot(c: PCell) {.rtl, inl.} = # we MUST access gch as a global here, because this crosses DLL boundaries! when hasThreadSupport and hasSharedHeap: AcquireSys(HeapLock) - if c.color != rcPurple: - c.setColor(rcPurple) - incl(gch.cycleRoots, c) + when cycleGC: + if c.color != rcPurple: + c.setColor(rcPurple) + incl(gch.cycleRoots, c) when hasThreadSupport and hasSharedHeap: ReleaseSys(HeapLock) @@ -811,7 +812,8 @@ proc CollectZCT(gch: var TGcHeap): bool = # as this might be too slow. # In any case, it should be removed from the ZCT. But not # freed. **KEEP THIS IN MIND WHEN MAKING THIS INCREMENTAL!** - if canBeCycleRoot(c): excl(gch.cycleRoots, c) + when cycleGC: + if canBeCycleRoot(c): excl(gch.cycleRoots, c) when logGC: writeCell("zct dealloc cell", c) gcTrace(c, csZctFreed) # We are about to free the object, call the finalizer BEFORE its