summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--lib/system/gc.nim10
-rwxr-xr-xtodo.txt1
2 files changed, 5 insertions, 6 deletions
diff --git a/lib/system/gc.nim b/lib/system/gc.nim
index bd8c7a5da..33b82686f 100644
--- a/lib/system/gc.nim
+++ b/lib/system/gc.nim
@@ -18,9 +18,6 @@
 # for soft real time applications (like games).
 {.push profiler:off.}
 
-# XXX there is still a slight chance of leaking cycles as we don't add cycle
-# candidates in 'incRef'
-
 const
   CycleIncrease = 2 # is a multiplicative increase
   InitialCycleThreshold = 4*1024*1024 # X MB because cycle checking is slow
@@ -201,10 +198,11 @@ proc decRef(c: PCell) {.inline.} =
 
 proc incRef(c: PCell) {.inline.} = 
   gcAssert(isAllocatedPtr(gch.region, c), "incRef: interiorPtr")
-  c.refcount = c.refCount +% rcIncrement and not colorMask
+  c.refcount = c.refCount +% rcIncrement
+  # and not colorMask
   #writeCell("incRef", c)
-  #if canBeCycleRoot(c):
-  #  rtlAddCycleRoot(c)
+  if canBeCycleRoot(c):
+    rtlAddCycleRoot(c)
 
 proc nimGCref(p: pointer) {.compilerProc, inline.} = incRef(usrToCell(p))
 proc nimGCunref(p: pointer) {.compilerProc, inline.} = decRef(usrToCell(p))
diff --git a/todo.txt b/todo.txt
index a6ae409bd..ad4328613 100755
--- a/todo.txt
+++ b/todo.txt
@@ -1,6 +1,7 @@
 version 0.9.2
 =============
 
+- acyclic vs prunable; introduce GC hints
 - implement constructors + full 'not nil' checking
 - ``restrict`` pragma + backend support
 - fix: 'result' is not properly cleaned for NRVO