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 30*1Sigor@sysoev.ru nxt_task_t task; 31*1Sigor@sysoev.ru 320Sigor@sysoev.ru nxt_fiber_main_t *main; 330Sigor@sysoev.ru nxt_fiber_t *next; 340Sigor@sysoev.ru 350Sigor@sysoev.ru nxt_event_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; 42*1Sigor@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); 50*1Sigor@sysoev.ru void nxt_fiber_yield(nxt_task_t *task); 51*1Sigor@sysoev.ru void nxt_fiber_sleep(nxt_task_t *task, nxt_msec_t timeout); 52*1Sigor@sysoev.ru void nxt_fiber_wait(nxt_task_t *task); 53*1Sigor@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