int se_scheduler_call(void *arg) { se *e = arg; sescheduler *s = &e->sched; seworker stub; se_workerstub_init(&stub); int rc = se_scheduler(s, &stub); se_workerstub_free(&stub, &e->r); return rc; }
int se_scheduler_call(void *arg) { se *e = arg; sescheduler *s = &e->sched; seworker *w = se_workerpool_pop(&e->sched.workers, &e->r); if (ssunlikely(w == NULL)) return -1; int rc = se_scheduler(s, w); se_workerpool_push(&e->sched.workers, w); return rc; }
static void *se_worker(void *arg) { seworker *self = arg; se *o = self->arg; for (;;) { int rc = se_active(o); if (ssunlikely(rc == 0)) break; rc = se_scheduler(&o->sched, self); if (ssunlikely(rc == -1)) break; if (ssunlikely(rc == 0)) ss_sleep(10000000); /* 10ms */ } return NULL; }
static void *se_worker(void *arg) { ssthread *self = arg; se *e = self->arg; seworker *worker = se_workerpool_pop(&e->sched.workers, &e->r); if (ssunlikely(worker == NULL)) return NULL; for (;;) { int rc = se_active(e); if (ssunlikely(rc == 0)) break; rc = se_scheduler(&e->sched, worker); if (ssunlikely(rc == -1)) break; if (ssunlikely(rc == 0)) ss_sleep(10000000); /* 10ms */ } se_workerpool_push(&e->sched.workers, worker); return NULL; }