summaryrefslogtreecommitdiff
path: root/includes/rts/Task.h
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2019-07-06 11:07:03 -0400
committerBen Gamari <ben@smart-cactus.org>2019-07-06 11:09:06 -0400
commit8bd87181c769581fa487ba12e8d5c2445b73d1cf (patch)
tree1080ec8c017bbb124522474e51daafd2b459045e /includes/rts/Task.h
parenta0db5c5cf57eecaabce15f7c33abf5db759cff40 (diff)
downloadhaskell-wip/expose-task.tar.gz
rts: Expose Taskwip/expose-task
Diffstat (limited to 'includes/rts/Task.h')
-rw-r--r--includes/rts/Task.h40
1 files changed, 40 insertions, 0 deletions
diff --git a/includes/rts/Task.h b/includes/rts/Task.h
new file mode 100644
index 0000000000..d8fe440823
--- /dev/null
+++ b/includes/rts/Task.h
@@ -0,0 +1,40 @@
+/* -----------------------------------------------------------------------------
+ *
+ * (c) The GHC Team, 1998-2009
+ *
+ * Task API
+ *
+ * Do not #include this file directly: #include "Rts.h" instead.
+ *
+ * To understand the structure of the RTS headers, see the wiki:
+ * https://gitlab.haskell.org/ghc/ghc/wikis/commentary/source-tree/includes
+ *
+ * -------------------------------------------------------------------------- */
+
+#pragma once
+
+typedef struct Task_ Task;
+
+// Create a new Task for a bound thread. This Task must be released
+// by calling boundTaskExiting. The Task is cached in
+// thread-local storage and will remain even after boundTaskExiting()
+// has been called; to free the memory, see freeMyTask().
+//
+Task* newBoundTask (void);
+
+// Return the current OS thread's Task, which is created if it doesn't already
+// exist. After you have finished using RTS APIs, you should call freeMyTask()
+// to release this thread's Task.
+Task* getTask (void);
+
+// The current task is a bound task that is exiting.
+//
+void boundTaskExiting (Task *task);
+
+// Free a Task if one was previously allocated by newBoundTask().
+// This is not necessary unless the thread that called newBoundTask()
+// will be exiting, or if this thread has finished calling Haskell
+// functions.
+//
+void freeMyTask(void);
+