void fiber_save_errno(void) { ACL_FIBER *curr; if (__thread_fiber == NULL) fiber_check(); if ((curr = __thread_fiber->running) == NULL) curr = &__thread_fiber->original; if (curr->flag & FIBER_F_SAVE_ERRNO) { //curr->flag &= ~FIBER_F_SAVE_ERRNO; return; } if (__sys_errno != NULL) acl_fiber_set_errno(curr, *__sys_errno()); else acl_fiber_set_errno(curr, errno); }
static void io_timer(ACL_FIBER *fiber, void *ctx) { FIBER_TIMER *ft = (FIBER_TIMER *) ctx; assert(fiber == ft->timer); acl_fiber_set_errno(ft->fiber, ETIMEDOUT); acl_fiber_keep_errno(ft->fiber, 1); printf("timer-%d wakeup, set fiber-%d, errno: %d, %d\r\n", acl_fiber_id(fiber), acl_fiber_id(ft->fiber), ETIMEDOUT, acl_fiber_errno(ft->fiber)); acl_fiber_ready(ft->fiber); }
void fiber::set_errno(int errnum) { if (f_) acl_fiber_set_errno(f_, errnum); }