xref: /unit/src/nxt_fiber.h (revision 0:a63ceefd6ab0)
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