diff options
author | Araq <rumpf_a@web.de> | 2014-04-20 01:17:46 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2014-04-20 01:17:46 +0200 |
commit | 9a2704056a03fb39c2b4a212cf9b15ae6b411544 (patch) | |
tree | b8aa8d2e7e924a79383457bfaecdef71622ce8a1 /lib | |
parent | 3b69a8d27a6b87bcb3440b5dae4aa2f618204264 (diff) | |
download | Nim-9a2704056a03fb39c2b4a212cf9b15ae6b411544.tar.gz |
marked markAndSweep GC thread safe
Diffstat (limited to 'lib')
-rw-r--r-- | lib/system/gc_ms.nim | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/lib/system/gc_ms.nim b/lib/system/gc_ms.nim index e78a4e5cd..3c99a57e1 100644 --- a/lib/system/gc_ms.nim +++ b/lib/system/gc_ms.nim @@ -32,11 +32,11 @@ type # local waMarkPrecise # fast precise marking - TFinalizer {.compilerproc.} = proc (self: pointer) {.nimcall.} + TFinalizer {.compilerproc.} = proc (self: pointer) {.nimcall, gcsafe.} # A ref type can have a finalizer that is called before the object's # storage is freed. - TGlobalMarkerProc = proc () {.nimcall.} + TGlobalMarkerProc = proc () {.nimcall, gcsafe.} TGcStat = object collections: int # number of performed full collections @@ -113,11 +113,11 @@ when BitsPerPage mod (sizeof(int)*8) != 0: {.error: "(BitsPerPage mod BitsPerUnit) should be zero!".} # forward declarations: -proc collectCT(gch: var TGcHeap) -proc isOnStack*(p: pointer): bool {.noinline.} -proc forAllChildren(cell: PCell, op: TWalkOp) -proc doOperation(p: pointer, op: TWalkOp) -proc forAllChildrenAux(dest: pointer, mt: PNimType, op: TWalkOp) +proc collectCT(gch: var TGcHeap) {.gcsafe.} +proc isOnStack*(p: pointer): bool {.noinline, gcsafe.} +proc forAllChildren(cell: PCell, op: TWalkOp) {.gcsafe.} +proc doOperation(p: pointer, op: TWalkOp) {.gcsafe.} +proc forAllChildrenAux(dest: pointer, mt: PNimType, op: TWalkOp) {.gcsafe.} # we need the prototype here for debugging purposes proc prepareDealloc(cell: PCell) = @@ -150,7 +150,7 @@ proc initGC() = Init(gch.allocated) init(gch.marked) -proc forAllSlotsAux(dest: pointer, n: ptr TNimNode, op: TWalkOp) = +proc forAllSlotsAux(dest: pointer, n: ptr TNimNode, op: TWalkOp) {.gcsafe.} = var d = cast[TAddress](dest) case n.kind of nkSlot: forAllChildrenAux(cast[pointer](d +% n.offset), n.typ, op) |