gc:stack compiles with --threads:on
This commit is contained in:
parent
ad70fb4ffe
commit
2bc6acd0ed
1 changed files with 17 additions and 7 deletions
|
|
@ -11,8 +11,8 @@
|
||||||
when defined(nimphpext):
|
when defined(nimphpext):
|
||||||
proc roundup(x, v: int): int {.inline.} =
|
proc roundup(x, v: int): int {.inline.} =
|
||||||
result = (x + (v-1)) and not (v-1)
|
result = (x + (v-1)) and not (v-1)
|
||||||
proc emalloc(size: int): pointer {.importc:"_emalloc".}
|
proc emalloc(size: int): pointer {.importc: "_emalloc".}
|
||||||
proc efree(mem: pointer) {.importc:"_efree".}
|
proc efree(mem: pointer) {.importc: "_efree".}
|
||||||
|
|
||||||
proc osAllocPages(size: int): pointer {.inline.} =
|
proc osAllocPages(size: int): pointer {.inline.} =
|
||||||
emalloc(size)
|
emalloc(size)
|
||||||
|
|
@ -144,11 +144,12 @@ proc runFinalizers(c: Chunk) =
|
||||||
(cast[Finalizer](it.typ.finalizer))(it+!sizeof(ObjHeader))
|
(cast[Finalizer](it.typ.finalizer))(it+!sizeof(ObjHeader))
|
||||||
it = it.nextFinal
|
it = it.nextFinal
|
||||||
|
|
||||||
proc dealloc(r: var MemRegion; p: pointer) =
|
when false:
|
||||||
let it = cast[ptr ObjHeader](p-!sizeof(ObjHeader))
|
proc dealloc(r: var MemRegion; p: pointer) =
|
||||||
if it.typ != nil and it.typ.finalizer != nil:
|
let it = cast[ptr ObjHeader](p-!sizeof(ObjHeader))
|
||||||
(cast[Finalizer](it.typ.finalizer))(p)
|
if it.typ != nil and it.typ.finalizer != nil:
|
||||||
it.typ = nil
|
(cast[Finalizer](it.typ.finalizer))(p)
|
||||||
|
it.typ = nil
|
||||||
|
|
||||||
proc deallocAll(r: var MemRegion; head: Chunk) =
|
proc deallocAll(r: var MemRegion; head: Chunk) =
|
||||||
var it = head
|
var it = head
|
||||||
|
|
@ -187,6 +188,8 @@ proc obstackPtr*(): StackPtr = tlRegion.obstackPtr()
|
||||||
proc setObstackPtr*(sp: StackPtr) = tlRegion.setObstackPtr(sp)
|
proc setObstackPtr*(sp: StackPtr) = tlRegion.setObstackPtr(sp)
|
||||||
proc deallocAll*() = tlRegion.deallocAll()
|
proc deallocAll*() = tlRegion.deallocAll()
|
||||||
|
|
||||||
|
proc deallocOsPages(r: var MemRegion) = r.deallocAll()
|
||||||
|
|
||||||
proc joinRegion*(dest: var MemRegion; src: MemRegion) =
|
proc joinRegion*(dest: var MemRegion; src: MemRegion) =
|
||||||
# merging is not hard.
|
# merging is not hard.
|
||||||
if dest.head.isNil:
|
if dest.head.isNil:
|
||||||
|
|
@ -424,6 +427,13 @@ proc realloc(p: pointer, newsize: Natural): pointer =
|
||||||
if result == nil: raiseOutOfMem()
|
if result == nil: raiseOutOfMem()
|
||||||
proc dealloc(p: pointer) = cfree(p)
|
proc dealloc(p: pointer) = cfree(p)
|
||||||
|
|
||||||
|
proc alloc0(r: var MemRegion; size: Natural): pointer =
|
||||||
|
# ignore the region. That is correct for the channels module
|
||||||
|
# but incorrect in general. XXX
|
||||||
|
result = alloc0(size)
|
||||||
|
|
||||||
|
proc dealloc(r: var MemRegion; p: pointer) = dealloc(p)
|
||||||
|
|
||||||
proc allocShared(size: Natural): pointer =
|
proc allocShared(size: Natural): pointer =
|
||||||
result = cmalloc(size)
|
result = cmalloc(size)
|
||||||
if result == nil: raiseOutOfMem()
|
if result == nil: raiseOutOfMem()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue