From 9b609b26ca07ee78cb24e82fa89d31072f9f9133 Mon Sep 17 00:00:00 2001 From: Andreas Rumpf Date: Mon, 23 May 2016 12:53:17 +0200 Subject: GC v2 compiles again --- lib/system/gc2.nim | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'lib') diff --git a/lib/system/gc2.nim b/lib/system/gc2.nim index 7d54c07be..7f8e466b5 100644 --- a/lib/system/gc2.nim +++ b/lib/system/gc2.nim @@ -97,6 +97,8 @@ type additionalRoots: CellSeq # dummy roots for GC_ref/unref spaceIter: ObjectSpaceIter dumpHeapFile: File # File that is used for GC_dumpHeap + when hasThreadSupport: + toDispose: SharedList[pointer] var gch {.rtlThreadVar.}: GcHeap @@ -119,6 +121,8 @@ proc initGC() = init(gch.decStack) init(gch.additionalRoots) init(gch.greyStack) + when hasThreadSupport: + gch.toDispose = initSharedList[pointer]() # Which color to use for new objects is tricky: When we're marking, # they have to be *white* so that everything is marked that is only @@ -800,6 +804,10 @@ proc nimGCvisit(d: pointer, op: int) {.compilerRtl.} = proc collectZCT(gch: var GcHeap): bool {.benign.} proc collectCycles(gch: var GcHeap): bool = + when hasThreadSupport: + for c in gch.toDispose: + nimGCunref(c) + # ensure the ZCT 'color' is not used: while gch.zct.len > 0: discard collectZCT(gch) -- cgit 1.4.1-2-gfad0