1 2 /* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) NGINX, Inc. 5 */ 6 7 #ifndef _NXT_FIBER_H_INCLUDED_ 8 #define _NXT_FIBER_H_INCLUDED_ 9 10 11 typedef struct nxt_fiber_main_s nxt_fiber_main_t; 12 typedef void (*nxt_fiber_start_t)(void *data); 13 14 15 typedef uint32_t nxt_fid_t; 16 #define nxt_fiber_id(f) (f)->fid; 17 18 19 typedef struct nxt_fiber_s nxt_fiber_t; 20 21 struct nxt_fiber_s { 22 jmp_buf jmp; 23 nxt_fid_t fid; 24 nxt_fiber_start_t start; 25 void *data; 26 char *stack; 27 size_t stack_size; 28 nxt_err_t err; 29 30 nxt_fiber_main_t *main; 31 nxt_fiber_t *next; 32 33 nxt_event_timer_t timer; 34 }; 35 36 37 struct nxt_fiber_main_s { 38 nxt_fiber_t fiber; 39 nxt_fiber_t *idle; 40 size_t stack_size; 41 nxt_fid_t fid; 42 }; 43 44 45 nxt_fiber_main_t *nxt_fiber_main_create(nxt_event_engine_t *engine); 46 nxt_int_t nxt_fiber_create(nxt_fiber_start_t start, void *data, size_t stack); 47 void nxt_fiber_yield(void); 48 void nxt_fiber_sleep(nxt_msec_t timeout); 49 void nxt_fiber_wait(void); 50 void nxt_fiber_exit(nxt_fiber_t *next, void *data); 51 NXT_EXPORT nxt_fiber_t *nxt_fiber_self(nxt_thread_t *thr); 52 53 54 #endif /* _NXT_FIBER_H_INCLUDED_ */ 55