mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-18 13:30:33 +00:00
* Revert "ORC: make rootsThreshold thread local [backport] (#21799)" This reverts commitb74d49c037. * Revert "fixes #21752 [backport] (#21802)" This reverts commitd0c62fa169.
This commit is contained in:
@@ -396,9 +396,9 @@ proc canFormAcycleAux(marker: var IntSet, typ: PType, startId: int): bool =
|
||||
result = true
|
||||
elif not containsOrIncl(marker, t.id):
|
||||
for i in 0..<t.len:
|
||||
result = canFormAcycleAux(marker, t[i], abs startId)
|
||||
result = canFormAcycleAux(marker, t[i], startId)
|
||||
if result: return
|
||||
if t.n != nil: result = canFormAcycleNode(marker, t.n, abs startId)
|
||||
if t.n != nil: result = canFormAcycleNode(marker, t.n, startId)
|
||||
# Inheritance can introduce cyclic types, however this is not relevant
|
||||
# as the type that is passed to 'new' is statically known!
|
||||
# er but we use it also for the write barrier ...
|
||||
@@ -415,10 +415,7 @@ proc isFinal*(t: PType): bool =
|
||||
proc canFormAcycle*(typ: PType): bool =
|
||||
var marker = initIntSet()
|
||||
let t = skipTypes(typ, abstractInst+{tyOwned}-{tyTypeDesc})
|
||||
# startId begins with a negative value that is only in the first recursion
|
||||
# and the following recursions set to its real value. This fixes
|
||||
# bug #21753:
|
||||
result = canFormAcycleAux(marker, t, -t.id)
|
||||
result = canFormAcycleAux(marker, t, t.id)
|
||||
|
||||
proc mutateTypeAux(marker: var IntSet, t: PType, iter: TTypeMutator,
|
||||
closure: RootRef): PType
|
||||
|
||||
@@ -350,7 +350,7 @@ const
|
||||
when defined(nimStressOrc):
|
||||
const rootsThreshold = 10 # broken with -d:nimStressOrc: 10 and for havlak iterations 1..8
|
||||
else:
|
||||
var rootsThreshold {.threadvar.}: int
|
||||
var rootsThreshold = defaultThreshold
|
||||
|
||||
proc partialCollect(lowMark: int) =
|
||||
when false:
|
||||
@@ -392,13 +392,13 @@ proc collectCycles() =
|
||||
# of the cycle collector's effectiveness:
|
||||
# we're effective when we collected 50% or more of the nodes
|
||||
# we touched. If we're effective, we can reset the threshold:
|
||||
if j.keepThreshold and rootsThreshold <= 0:
|
||||
if j.keepThreshold and rootsThreshold <= defaultThreshold:
|
||||
discard
|
||||
elif j.freed * 2 >= j.touched:
|
||||
when not defined(nimFixedOrc):
|
||||
rootsThreshold = max(rootsThreshold div 3 * 2, 16)
|
||||
else:
|
||||
rootsThreshold = 0
|
||||
rootsThreshold = defaultThreshold
|
||||
#cfprintf(cstderr, "[collectCycles] freed %ld, touched %ld new threshold %ld\n", j.freed, j.touched, rootsThreshold)
|
||||
elif rootsThreshold < high(int) div 4:
|
||||
rootsThreshold = rootsThreshold * 3 div 2
|
||||
@@ -411,7 +411,7 @@ proc registerCycle(s: Cell; desc: PNimTypeV2) =
|
||||
if roots.d == nil: init(roots)
|
||||
add(roots, s, desc)
|
||||
|
||||
if roots.len >= rootsThreshold+defaultThreshold:
|
||||
if roots.len >= rootsThreshold:
|
||||
collectCycles()
|
||||
when logOrc:
|
||||
writeCell("[added root]", s, desc)
|
||||
@@ -427,7 +427,7 @@ proc GC_enableOrc*() =
|
||||
## Enables the cycle collector subsystem of `--gc:orc`. This is a `--gc:orc`
|
||||
## specific API. Check with `when defined(gcOrc)` for its existence.
|
||||
when not defined(nimStressOrc):
|
||||
rootsThreshold = 0
|
||||
rootsThreshold = defaultThreshold
|
||||
|
||||
proc GC_disableOrc*() =
|
||||
## Disables the cycle collector subsystem of `--gc:orc`. This is a `--gc:orc`
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
discard """
|
||||
outputsub: "(allocCount: 4050, deallocCount: 4048)"
|
||||
outputsub: "(allocCount: 4302, deallocCount: 4300)"
|
||||
cmd: "nim c --gc:orc -d:nimAllocStats $file"
|
||||
"""
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
discard """
|
||||
nimoutFull: true
|
||||
cmd: '''nim c -r --warnings:off --hints:off --mm:arc --expandArc:newTarget --expandArc:delete --expandArc:p1 --expandArc:tt --hint:Performance:off --assertions:off --expandArc:extractConfig --expandArc:mergeShadowScope --expandArc:check $file'''
|
||||
cmd: '''nim c -r --warnings:off --hints:off --gc:arc --expandArc:newTarget --expandArc:delete --expandArc:p1 --expandArc:tt --hint:Performance:off --assertions:off --expandArc:extractConfig --expandArc:mergeShadowScope --expandArc:check $file'''
|
||||
nimout: '''
|
||||
--expandArc: newTarget
|
||||
|
||||
|
||||
Reference in New Issue
Block a user