diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/system.nim | 6 | ||||
-rw-r--r-- | lib/system/excpt.nim | 5 | ||||
-rw-r--r-- | lib/system/threads.nim | 4 |
3 files changed, 9 insertions, 6 deletions
diff --git a/lib/system.nim b/lib/system.nim index 28536b89b..be87f35d0 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -2923,14 +2923,14 @@ when not defined(JS): #and not defined(nimscript): ## allows you to override the behaviour of your application when CTRL+C ## is pressed. Only one such hook is supported. - proc writeStackTrace*() {.tags: [WriteIOEffect].} + proc writeStackTrace*() {.tags: [WriteIOEffect], gcsafe.} ## writes the current stack trace to ``stderr``. This is only works ## for debug builds. when hostOS != "standalone": - proc getStackTrace*(): string + proc getStackTrace*(): string {.gcsafe.} ## gets the current stack trace. This only works for debug builds. - proc getStackTrace*(e: ref Exception): string + proc getStackTrace*(e: ref Exception): string {.gcsafe.} ## gets the stack trace associated with `e`, which is the stack that ## lead to the ``raise`` statement. This only works for debug builds. 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): |