mirror of https://github.com/yandex/odyssey.git
42 lines
775 B
C
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 */
|