예제 #1
0
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;
}
예제 #2
0
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;
}
예제 #3
0
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;
}
예제 #4
0
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;
}