diff options
Diffstat (limited to 'lib/system')
-rw-r--r-- | lib/system/excpt.nim | 5 | ||||
-rw-r--r-- | lib/system/threads.nim | 4 |
2 files changed, 6 insertions, 3 deletions
diff --git a/lib/system/excpt.nim b/lib/system/excpt.nim index b89729850..dcf41b67d 100644 --- a/lib/system/excpt.nim +++ b/lib/system/excpt.nim @@ -11,7 +11,8 @@ # use the heap (and nor exceptions) do not include the GC or memory allocator. var - errorMessageWriter*: (proc(msg: string) {.tags: [WriteIOEffect], benign.}) + errorMessageWriter*: (proc(msg: string) {.tags: [WriteIOEffect], benign, + nimcall.}) ## Function that will be called ## instead of stdmsg.write when printing stacktrace. ## Unstable API. @@ -26,7 +27,7 @@ else: proc writeToStdErr(msg: cstring) = discard MessageBoxA(0, msg, nil, 0) -proc showErrorMessage(data: cstring) = +proc showErrorMessage(data: cstring) {.gcsafe.} = if errorMessageWriter != nil: errorMessageWriter($data) else: diff --git a/lib/system/threads.nim b/lib/system/threads.nim index 838f6e16b..62829f62c 100644 --- a/lib/system/threads.nim +++ b/lib/system/threads.nim @@ -331,7 +331,9 @@ else: when TArg is void: thrd.dataFn() else: - thrd.dataFn(thrd.data) + var x: TArg + deepCopy(x, thrd.data) + thrd.dataFn(x) proc threadProcWrapStackFrame[TArg](thrd: ptr Thread[TArg]) = when defined(boehmgc): |