diff --git a/lib/system/seqs_v2.nim b/lib/system/seqs_v2.nim index f81ac57d59..9120184134 100644 --- a/lib/system/seqs_v2.nim +++ b/lib/system/seqs_v2.nim @@ -27,8 +27,9 @@ when defined(gcYrc): lockState {.threadvar.}: YrcLockState proc acquireMutatorLock() {.compilerRtl, inl.} = - acquireRead gYrcGlobalLock - lockState = HasMutatorLock + if lockState == HasNoLock: + acquireRead gYrcGlobalLock + lockState = HasMutatorLock proc releaseMutatorLock() {.compilerRtl, inl.} = if lockState == HasMutatorLock: diff --git a/lib/system/yrc.nim b/lib/system/yrc.nim index 293ef0a0b9..c18d01a45a 100644 --- a/lib/system/yrc.nim +++ b/lib/system/yrc.nim @@ -435,7 +435,7 @@ when defined(nimOrcStats): proc GC_runOrc* = yrcCollectorLock: mergePendingRoots() - if mayRunCycleCollect(): + if roots.len > 0 and mayRunCycleCollect(): var j: GcEnv init j.traceStack collectCyclesBacon(j, 0)