summaryrefslogtreecommitdiffstats
path: root/include/libtf/fiber.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/libtf/fiber.h')
-rw-r--r--include/libtf/fiber.h45
1 files changed, 31 insertions, 14 deletions
diff --git a/include/libtf/fiber.h b/include/libtf/fiber.h
index 09d5ef1..91c0b3b 100644
--- a/include/libtf/fiber.h
+++ b/include/libtf/fiber.h
@@ -1,4 +1,4 @@
-/* tf.h - libtf main include
+/* fiber.h - libtf fiber scheduler header
*
* Copyright (C) 2009 Timo Teräs <timo.teras@iki.fi>
* All rights reserved.
@@ -19,16 +19,31 @@
#include <libtf/list.h>
#include <libtf/heap.h>
+#define TF_UCTX_H "uctx-setjmp.h"
+
+/* Fiber wakeup reasons */
+#define TF_WAKEUP_NONE 0
+#define TF_WAKEUP_IMMEDIATE EAGAIN
+#define TF_WAKEUP_KILL EINTR
+#define TF_WAKEUP_TIMEOUT ETIMEDOUT
+#define TF_WAKEUP_FD EIO
+
/* Scheduler */
+struct tf_fiber;
+
+struct tf_poll_data {
+ int epoll_fd;
+ int num_waiters;
+};
+
struct tf_scheduler {
struct tf_list_head run_q;
- struct tf_list_head sleep_q;
struct tf_heap_head heap;
-
struct tf_fiber * active_fiber;
int num_fibers;
-
tf_mtime_t scheduler_time;
+ struct tf_poll_data poll_data;
+
};
static inline
@@ -39,6 +54,12 @@ struct tf_scheduler *tf_get_scheduler(void)
}
static inline
+struct tf_fiber *tf_get_fiber(void)
+{
+ return tf_get_scheduler()->active_fiber;
+}
+
+static inline
tf_mtime_t tf_mtime(void)
{
return tf_get_scheduler()->scheduler_time;
@@ -53,18 +74,14 @@ void *tf_fiber_get(void *data);
void tf_fiber_put(void *data);
/* Scheduling and fiber management */
-int tf_schedule(int err);
-int tf_msleep(int milliseconds);
+void tf_exit(void) attribute_noreturn;
void tf_kill(void *fiber);
-static inline int tf_yield(void)
-{
- return tf_schedule(EAGAIN);
-}
+int tf_schedule(int wakeup_type);
+int tf_schedule_timeout(int milliseconds);
+void tf_wakeup(struct tf_fiber *fiber, int wakeup_type);
-static inline int tf_exit(void)
-{
- return tf_schedule(EFAULT);
-}
+int tf_yield(void);
+int tf_msleep(int milliseconds);
#endif