diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2016-05-23 12:53:17 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2016-05-23 12:53:17 +0200 |
commit | 9b609b26ca07ee78cb24e82fa89d31072f9f9133 (patch) | |
tree | be1a23393450135933cf3446f968bd8bf13060b7 /lib/system/gc2.nim | |
parent | 6dd088700980b69ac52338a142afef5ff34e18c3 (diff) | |
download | Nim-9b609b26ca07ee78cb24e82fa89d31072f9f9133.tar.gz |
GC v2 compiles again
Diffstat (limited to 'lib/system/gc2.nim')
-rw-r--r-- | lib/system/gc2.nim | 8 |
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) |