xref: /unit/src/nxt_fiber.h (revision 6:6b3ce47b7663)
10Sigor@sysoev.ru 
20Sigor@sysoev.ru /*
30Sigor@sysoev.ru  * Copyright (C) Igor Sysoev
40Sigor@sysoev.ru  * Copyright (C) NGINX, Inc.
50Sigor@sysoev.ru  */
60Sigor@sysoev.ru 
70Sigor@sysoev.ru #ifndef _NXT_FIBER_H_INCLUDED_
80Sigor@sysoev.ru #define _NXT_FIBER_H_INCLUDED_
90Sigor@sysoev.ru 
100Sigor@sysoev.ru 
110Sigor@sysoev.ru typedef struct nxt_fiber_main_s   nxt_fiber_main_t;
120Sigor@sysoev.ru typedef void (*nxt_fiber_start_t)(void *data);
130Sigor@sysoev.ru 
140Sigor@sysoev.ru 
150Sigor@sysoev.ru typedef uint32_t            nxt_fid_t;
160Sigor@sysoev.ru #define nxt_fiber_id(f)     (f)->fid;
170Sigor@sysoev.ru 
180Sigor@sysoev.ru 
190Sigor@sysoev.ru typedef struct nxt_fiber_s  nxt_fiber_t;
200Sigor@sysoev.ru 
210Sigor@sysoev.ru struct nxt_fiber_s {
220Sigor@sysoev.ru     jmp_buf                 jmp;
230Sigor@sysoev.ru     nxt_fid_t               fid;
240Sigor@sysoev.ru     nxt_fiber_start_t       start;
250Sigor@sysoev.ru     void                    *data;
260Sigor@sysoev.ru     char                    *stack;
270Sigor@sysoev.ru     size_t                  stack_size;
280Sigor@sysoev.ru     nxt_err_t               err;
290Sigor@sysoev.ru 
301Sigor@sysoev.ru     nxt_task_t              task;
311Sigor@sysoev.ru 
320Sigor@sysoev.ru     nxt_fiber_main_t        *main;
330Sigor@sysoev.ru     nxt_fiber_t             *next;
340Sigor@sysoev.ru 
35*6Sigor@sysoev.ru     nxt_timer_t             timer;
360Sigor@sysoev.ru };
370Sigor@sysoev.ru 
380Sigor@sysoev.ru 
390Sigor@sysoev.ru struct nxt_fiber_main_s {
400Sigor@sysoev.ru     nxt_fiber_t             fiber;
410Sigor@sysoev.ru     nxt_fiber_t             *idle;
421Sigor@sysoev.ru     nxt_event_engine_t      *engine;
430Sigor@sysoev.ru     size_t                  stack_size;
440Sigor@sysoev.ru     nxt_fid_t               fid;
450Sigor@sysoev.ru };
460Sigor@sysoev.ru 
470Sigor@sysoev.ru 
480Sigor@sysoev.ru nxt_fiber_main_t *nxt_fiber_main_create(nxt_event_engine_t *engine);
490Sigor@sysoev.ru nxt_int_t nxt_fiber_create(nxt_fiber_start_t start, void *data, size_t stack);
501Sigor@sysoev.ru void nxt_fiber_yield(nxt_task_t *task);
511Sigor@sysoev.ru void nxt_fiber_sleep(nxt_task_t *task, nxt_msec_t timeout);
521Sigor@sysoev.ru void nxt_fiber_wait(nxt_task_t *task);
531Sigor@sysoev.ru void nxt_fiber_exit(nxt_task_t *task, nxt_fiber_t *next, void *data);
540Sigor@sysoev.ru NXT_EXPORT nxt_fiber_t *nxt_fiber_self(nxt_thread_t *thr);
550Sigor@sysoev.ru 
560Sigor@sysoev.ru 
570Sigor@sysoev.ru #endif /* _NXT_FIBER_H_INCLUDED_ */
58