Added ignoreStackAndRegisters parameter to GC_step

This commit is contained in:
Ruslan Mustakov 2016-05-10 21:51:42 +06:00
commit f288eb7543
3 changed files with 33 additions and 25 deletions

View file

@ -894,18 +894,18 @@ proc unmarkStackAndRegisters(gch: var GcHeap) =
decRef(d[i])
gch.decStack.len = 0
proc collectCTBody(gch: var GcHeap) =
proc collectCTBody(gch: var GcHeap, ignoreStackAndRegisters = false) =
when withRealTime:
let t0 = getticks()
sysAssert(allocInv(gch.region), "collectCT: begin")
when not defined(nimCoroutines):
gch.stat.maxStackSize = max(gch.stat.maxStackSize, stackSize())
sysAssert(gch.decStack.len == 0, "collectCT")
prepareForInteriorPointerChecking(gch.region)
markStackAndRegisters(gch)
gch.stat.maxStackCells = max(gch.stat.maxStackCells, gch.decStack.len)
inc(gch.stat.stackScans)
if not ignoreStackAndRegisters:
when not defined(nimCoroutines):
gch.stat.maxStackSize = max(gch.stat.maxStackSize, stackSize())
markStackAndRegisters(gch)
gch.stat.maxStackCells = max(gch.stat.maxStackCells, gch.decStack.len)
inc(gch.stat.stackScans)
if collectZCT(gch):
when cycleGC:
if getOccupiedMem(gch.region) >= gch.cycleThreshold or alwaysCycleGC:
@ -914,7 +914,8 @@ proc collectCTBody(gch: var GcHeap) =
gch.cycleThreshold = max(InitialCycleThreshold, getOccupiedMem() *
CycleIncrease)
gch.stat.maxThreshold = max(gch.stat.maxThreshold, gch.cycleThreshold)
unmarkStackAndRegisters(gch)
if not ignoreStackAndRegisters:
unmarkStackAndRegisters(gch)
sysAssert(allocInv(gch.region), "collectCT: end")
when withRealTime:
@ -949,14 +950,15 @@ when withRealTime:
proc GC_setMaxPause*(MaxPauseInUs: int) =
gch.maxPause = MaxPauseInUs.toNano
proc GC_step(gch: var GcHeap, us: int, strongAdvice: bool) =
proc GC_step(gch: var GcHeap, us: int, strongAdvice, ignoreStackAndRegisters: bool) =
gch.maxPause = us.toNano
if (gch.zct.len >= ZctThreshold or (cycleGC and
getOccupiedMem(gch.region)>=gch.cycleThreshold) or alwaysGC) or
strongAdvice:
collectCTBody(gch)
collectCTBody(gch, ignoreStackAndRegisters)
proc GC_step*(us: int, strongAdvice = false) = GC_step(gch, us, strongAdvice)
proc GC_step*(us: int, strongAdvice, ignoreStackAndRegisters = false) =
GC_step(gch, us, strongAdvice, ignoreStackAndRegisters)
when not defined(useNimRtl):
proc GC_disable() =