summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorflywind <xzsflywind@gmail.com>2021-04-21 11:05:16 +0800
committerGitHub <noreply@github.com>2021-04-21 11:05:16 +0800
commit603af22b7ca46ac566f8c7c15402028f3f976a4e (patch)
tree1203829a81748b1ca4d959c454848faa62cd97ca
parenteb221dcc27b7f8f11ec34046e3165508acdf8beb (diff)
downloadNim-603af22b7ca46ac566f8c7c15402028f3f976a4e.tar.gz
[std/tasks]add gcsafe pragmas (#17799)
* [std/tasks]add gcsafe pragmas

* Update tasks.nim
-rw-r--r--lib/std/tasks.nim8
1 files changed, 4 insertions, 4 deletions
diff --git a/lib/std/tasks.nim b/lib/std/tasks.nim
index aed36f985..97c4df3f7 100644
--- a/lib/std/tasks.nim
+++ b/lib/std/tasks.nim
@@ -59,7 +59,7 @@ when compileOption("threads"):
 
 type
   Task* = object ## `Task` contains the callback and its arguments.
-    callback: proc (args: pointer) {.nimcall.}
+    callback: proc (args: pointer) {.nimcall, gcsafe.}
     args: pointer
     destroy: proc (args: pointer) {.nimcall.}
 
@@ -73,7 +73,7 @@ proc `=destroy`*(t: var Task) {.inline.} =
       t.destroy(t.args)
     c_free(t.args)
 
-proc invoke*(task: Task) {.inline.} =
+proc invoke*(task: Task) {.inline, gcsafe.} =
   ## Invokes the `task`.
   assert task.callback != nil
   task.callback(task.args)
@@ -215,7 +215,7 @@ macro toTask*(e: typed{nkCall | nkInfix | nkPrefix | nkPostfix | nkCommand | nkC
     result = quote do:
       `stmtList`
 
-      proc `funcName`(args: pointer) {.nimcall.} =
+      proc `funcName`(args: pointer) {.gcsafe, nimcall.} =
         let `objTemp` = cast[ptr `scratchObjType`](args)
         `functionStmtList`
 
@@ -229,7 +229,7 @@ macro toTask*(e: typed{nkCall | nkInfix | nkPrefix | nkPostfix | nkCommand | nkC
     let funcName = genSym(nskProc, e[0].strVal)
 
     result = quote do:
-      proc `funcName`(args: pointer) {.nimcall.} =
+      proc `funcName`(args: pointer) {.gcsafe, nimcall.} =
         `funcCall`
 
       Task(callback: `funcName`, args: nil)