summary refs log tree commit diff stats
path: root/lib/system
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2019-12-24 12:08:22 +0100
committerAndreas Rumpf <rumpf_a@web.de>2019-12-24 17:33:27 +0100
commit5aa7b1a44b869303e09e0ab0df6a63c2171a1806 (patch)
tree7d21c31e770bf8bb5ae491798199bcc3f6608118 /lib/system
parentbafb4f119ca85b47502f23fbc3f3f569caa0a3c6 (diff)
downloadNim-5aa7b1a44b869303e09e0ab0df6a63c2171a1806.tar.gz
ARC: default to a shared heap with --threads:on
Diffstat (limited to 'lib/system')
-rw-r--r--lib/system/allocators.nim6
-rw-r--r--lib/system/refs_v2.nim4
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: