summary refs log tree commit diff stats
path: root/lib/system/gc_ms.nim
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2017-07-20 18:42:00 +0200
committerAndreas Rumpf <rumpf_a@web.de>2017-07-20 18:42:08 +0200
commit6f89323385f3a0aedaf8e83ec72fe73477b3518c (patch)
treec4c61fecc4c37c237672a7d9fc20780eda5c59e7 /lib/system/gc_ms.nim
parentebba9f06ae3074255830128ecb599fb22a3310ef (diff)
downloadNim-6f89323385f3a0aedaf8e83ec72fe73477b3518c.tar.gz
make the GCs more robust
Diffstat (limited to 'lib/system/gc_ms.nim')
-rw-r--r--lib/system/gc_ms.nim14
1 files changed, 7 insertions, 7 deletions
diff --git a/lib/system/gc_ms.nim b/lib/system/gc_ms.nim
index a97e974a1..ba8c569f7 100644
--- a/lib/system/gc_ms.nim
+++ b/lib/system/gc_ms.nim
@@ -506,11 +506,13 @@ when not defined(useNimRtl):
     else:
       inc(gch.recGcLock)
   proc GC_enable() =
-    if gch.recGcLock > 0:
-      when hasThreadSupport and hasSharedHeap:
-        atomicDec(gch.recGcLock, 1)
-      else:
-        dec(gch.recGcLock)
+    if gch.recGcLock <= 0:
+      raise newException(AssertionError,
+          "API usage error: GC_enable called but GC is already enabled")
+    when hasThreadSupport and hasSharedHeap:
+      atomicDec(gch.recGcLock, 1)
+    else:
+      dec(gch.recGcLock)
 
   proc GC_setStrategy(strategy: GC_Strategy) = discard
 
@@ -530,7 +532,6 @@ when not defined(useNimRtl):
     release(gch)
 
   proc GC_getStatistics(): string =
-    GC_disable()
     result = "[GC] total memory: " & $getTotalMem() & "\n" &
              "[GC] occupied memory: " & $getOccupiedMem() & "\n" &
              "[GC] collections: " & $gch.stat.collections & "\n" &
@@ -542,6 +543,5 @@ when not defined(useNimRtl):
         result = result & "[GC]   stack " & stack.bottom.repr & "[GC]     max stack size " & $stack.maxStackSize & "\n"
     else:
       result = result & "[GC] max stack size: " & $gch.stat.maxStackSize & "\n"
-    GC_enable()
 
 {.pop.}
e>
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18