diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2017-07-20 18:42:00 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2017-07-20 18:42:08 +0200 |
commit | 6f89323385f3a0aedaf8e83ec72fe73477b3518c (patch) | |
tree | c4c61fecc4c37c237672a7d9fc20780eda5c59e7 /lib/system/gc_ms.nim | |
parent | ebba9f06ae3074255830128ecb599fb22a3310ef (diff) | |
download | Nim-6f89323385f3a0aedaf8e83ec72fe73477b3518c.tar.gz |
make the GCs more robust
Diffstat (limited to 'lib/system/gc_ms.nim')
-rw-r--r-- | lib/system/gc_ms.nim | 14 |
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.} |