aboutsummaryrefslogtreecommitdiff
path: root/include/kpl/object.h
diff options
context:
space:
mode:
authornodist <kevin.comas.git@gmail.com>2026-10-17 15:41:01 -0400
committernodist <kevin.comas.git@gmail.com>2026-10-17 15:41:01 -0400
commit801aeb9172136ca93a4603fcf8dcf8e19a1522fe (patch)
tree3e55e80388c53188d042bb3ced3dad36c510abf9 /include/kpl/object.h
parent6673bb9357b9ed8187f3dcb2917e2c6a9da25ee7 (diff)
add io_uring
Diffstat (limited to 'include/kpl/object.h')
-rw-r--r--include/kpl/object.h19
1 files changed, 14 insertions, 5 deletions
diff --git a/include/kpl/object.h b/include/kpl/object.h
index 751088d..1f3ec04 100644
--- a/include/kpl/object.h
+++ b/include/kpl/object.h
@@ -48,9 +48,18 @@ inline void kpl_object_queue_enqueue(kpl_object_queue *object_queue, void *objec
*/
void *kpl_object_queue_dequeue(kpl_object_queue *object_queue);
-typedef void kpl_task_fn(kpl_task *task, kpl_env *env);
+typedef void kpl_task_fn(kpl_object_task *task, kpl_env *env);
-typedef struct _kpl_task {
- KPL_OBJECT_HEADER(_kpl_task);
- // TODO
-} kpl_task;
+/*
+ * Coroutine state object
+ */
+typedef struct _kpl_object_task {
+ KPL_OBJECT_HEADER(_kpl_object_task);
+ _Atomic bool join_ready __attribute__((aligned(4))); // shares cache line with variables_size
+ int32_t variables_size, io_res; // variables_size is set once then only read
+ uint32_t io_flags; // io_res and io_flags are set by io_uring complete
+ kpl_object_task *join;
+ kpl_task_fn *task_fn;
+ kpl_result result;
+ kpl_class variables[]; // a task has no distinction between an argument or a local, both live here
+} kpl_object_task;