diff options
author | Araq <rumpf_a@web.de> | 2019-12-24 12:08:22 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2019-12-24 17:33:27 +0100 |
commit | 5aa7b1a44b869303e09e0ab0df6a63c2171a1806 (patch) | |
tree | 7d21c31e770bf8bb5ae491798199bcc3f6608118 /lib/system | |
parent | bafb4f119ca85b47502f23fbc3f3f569caa0a3c6 (diff) | |
download | Nim-5aa7b1a44b869303e09e0ab0df6a63c2171a1806.tar.gz |
ARC: default to a shared heap with --threads:on
Diffstat (limited to 'lib/system')
-rw-r--r-- | lib/system/allocators.nim | 6 | ||||
-rw-r--r-- | lib/system/refs_v2.nim | 4 |
2 files changed, 10 insertions, 0 deletions
diff --git a/lib/system/allocators.nim b/lib/system/allocators.nim index 43aae0111..e642999a8 100644 --- a/lib/system/allocators.nim +++ b/lib/system/allocators.nim @@ -46,18 +46,24 @@ proc getLocalAllocator*(): Allocator = result = c_malloc(cuint size) # XXX do we need this? nimZeroMem(result, size) + elif compileOption("threads"): + result = system.allocShared0(size) else: result = system.alloc0(size) inc a.allocCount result.dealloc = proc (a: Allocator; p: pointer; size: int) {.nimcall, raises: [].} = when defined(useMalloc) and not defined(nimscript): c_free(p) + elif compileOption("threads"): + system.deallocShared(p) else: system.dealloc(p) inc a.deallocCount result.realloc = proc (a: Allocator; p: pointer; oldSize, newSize: int): pointer {.nimcall, raises: [].} = when defined(useMalloc) and not defined(nimscript): result = c_realloc(p, cuint newSize) + elif compileOption("threads"): + result = system.reallocShared(p, newSize) else: result = system.realloc(p, newSize) nimZeroMem(result +! oldSize, newSize - oldSize) diff --git a/lib/system/refs_v2.nim b/lib/system/refs_v2.nim index 3033880c3..6fd34fca6 100644 --- a/lib/system/refs_v2.nim +++ b/lib/system/refs_v2.nim @@ -67,6 +67,8 @@ proc nimNewObj(size: int): pointer {.compilerRtl.} = var orig = c_malloc(cuint s) nimZeroMem(orig, s) result = orig +! sizeof(RefHeader) + elif compileOption("threads"): + result = allocShared0(s) +! sizeof(RefHeader) else: result = alloc0(s) +! sizeof(RefHeader) when hasThreadSupport: @@ -93,6 +95,8 @@ proc nimRawDispose(p: pointer) {.compilerRtl.} = quit 1 when defined(useMalloc): c_free(p -! sizeof(RefHeader)) + elif compileOption("threads"): + deallocShared(p -! sizeof(RefHeader)) else: dealloc(p -! sizeof(RefHeader)) if allocs > 0: |