int l_se_run(lua_State *L) { se_main_thread.L = L; se_main_thread.lref = LUA_NOREF; se_current = &se_main_thread; se_thread_new(L); return se_schedule(L); }
int se_scheduler(sescheduler *s, seworker *w) { setask task; int rc = se_schedule(s, &task, w); int job = rc; if (task.rotate) { rc = se_rotate(s, w); if (ssunlikely(rc == -1)) goto error; } if (task.req) { rc = se_dispatch(s, w, &task); if (ssunlikely(rc == -1)) { goto error; } } se *e = (se*)s->env; if (task.backup_complete) se_reqonbackup(e); if (job) { rc = se_run(&task, w); if (ssunlikely(rc == -1)) { if (task.plan.plan != SI_BACKUP && task.plan.plan != SI_BACKUPEND) { se_dbmalfunction(task.db); goto error; } ss_mutexlock(&s->lock); se_backuperror(s); ss_mutexunlock(&s->lock); } } if (task.gc) { rc = se_gc(s, w); if (ssunlikely(rc == -1)) goto error; } se_complete(s, &task); ss_trace(&w->trace, "%s", "sleep"); return job; error: ss_trace(&w->trace, "%s", "malfunction"); return -1; }