odyssey/third_party/machinarium/sources/machine.h

42 lines
775 B
C

#ifndef MM_MACHINE_H
#define MM_MACHINE_H
/*
* machinarium.
*
* cooperative multitasking engine.
*/
typedef struct mm_machine mm_machine_t;
struct mm_machine
{
int online;
uint64_t id;
char *name;
machine_coroutine_t main;
void *main_arg;
mm_thread_t thread;
mm_scheduler_t scheduler;
mm_signalmgr_t signal_mgr;
mm_eventmgr_t event_mgr;
mm_loop_t loop;
mm_list_t link;
};
extern __thread mm_machine_t *mm_self;
static inline void
mm_errno_set(int value)
{
mm_scheduler_current(&mm_self->scheduler)->errno_ = value;
}
static inline int
mm_errno_get(void)
{
return mm_scheduler_current(&mm_self->scheduler)->errno_;
}
#endif /* MM_MACHINE_H */