diff options
Diffstat (limited to 'include/kpl/object.h')
| -rw-r--r-- | include/kpl/object.h | 19 |
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; |
