static int se_dispatch(sescheduler *s, seworker *w, setask *t) { ss_trace(&w->trace, "%s", "dispatcher"); se *e = (se*)s->env; int block = t->req == 1; do { int rc = se_active(e); if (ssunlikely(rc == 0)) break; sereq *req = se_reqdispatch(e, block); if (req) { se_execute(req); se_reqready(req); } } while (block); return 0; }
static int se_dispatch(sescheduler *s, seworker *w, setask *t) { ss_trace(&w->trace, "%s", "dispatcher"); se *e = (se*)s->env; int block = t->req == 1; do { int rc = se_active(e); if (ssunlikely(rc == 0)) break; sereq *req = se_reqdispatch(e, block); if (req) { switch (req->op) { case SE_REQREAD: se_execute_read(req); break; default: assert(0); } se_reqready(req); } } while (block); return 0; }