odyssey/lib/mm.h

44 lines
671 B
C

#ifndef MM_H_
#define MM_H_
/*
* machinarium.
*
* Cooperative multitasking engine.
*/
typedef struct mm mm;
struct mm {
int online;
mmscheduler scheduler;
uv_loop_t loop;
uv_async_t async;
};
static inline mmfiber*
mm_current(mm *f) {
return f->scheduler.current;
}
static inline void
mm_wakeup(mm *f, mmfiber *fiber)
{
mm_scheduler_set(fiber, MM_FREADY);
uv_async_send(&f->async);
}
static inline void
mm_wakeup_waiters(mm *f, mmfiber *fiber)
{
mmfiber *waiter;
mmlist *i;
mm_listforeach(&fiber->waiters, i) {
waiter = mm_container_of(i, mmfiber, link_wait);
mm_scheduler_set(waiter, MM_FREADY);
}
uv_async_send(&f->async);
}
#endif