summary refs log tree commit diff stats
path: root/lib/system/gc2.nim
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2016-05-23 12:53:17 +0200
committerAndreas Rumpf <rumpf_a@web.de>2016-05-23 12:53:17 +0200
commit9b609b26ca07ee78cb24e82fa89d31072f9f9133 (patch)
treebe1a23393450135933cf3446f968bd8bf13060b7 /lib/system/gc2.nim
parent6dd088700980b69ac52338a142afef5ff34e18c3 (diff)
downloadNim-9b609b26ca07ee78cb24e82fa89d31072f9f9133.tar.gz
GC v2 compiles again
Diffstat (limited to 'lib/system/gc2.nim')
-rw-r--r--lib/system/gc2.nim8
1 files changed, 8 insertions, 0 deletions
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)