Ejemplo n.º 1
0
static int
wait(struct waithead *wh, uint64_t nsec)
{
	struct waiter w;

	w.who = bmk_sched_current();
	TAILQ_INSERT_TAIL(wh, &w, entries);
	w.onlist = 1;
	bmk_sched_block(w.who);
	if (nsec)
		bmk_sched_setwakeup(w.who, bmk_clock_now() + nsec);
	bmk_sched();

	/* woken up by timeout? */
	if (w.onlist)
		TAILQ_REMOVE(wh, &w, entries);

	return w.onlist ? ETIMEDOUT : 0;
}
Ejemplo n.º 2
0
static int
wait(struct waithead *wh, bmk_time_t wakeup)
{
	struct waiter w;

	if (wakeup != BMK_SCHED_BLOCK_INFTIME)
		wakeup += bmk_platform_cpu_clock_monotonic();

	w.who = bmk_current;
	w.onlist = 1;
	TAILQ_INSERT_TAIL(wh, &w, entries);

	bmk_sched_blockprepare_timeout(wakeup);
	bmk_sched_block();

	/* woken up by timeout? */
	if (w.onlist)
		TAILQ_REMOVE(wh, &w, entries);

	return w.onlist ? BMK_ETIMEDOUT : 0;
}