X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fpoll-loop.c;h=91034b04e907fd2456c5658d65e8fb1368887198;hb=b4d76c80a078dcf641f36aa3b3b50a5667a27e16;hp=29931f7855ae53f0d4e2651443a6dba9b382ab01;hpb=8bf4bbe390af3f370e7e95d9237572ff750047a8;p=openvswitch diff --git a/lib/poll-loop.c b/lib/poll-loop.c index 29931f78..91034b04 100644 --- a/lib/poll-loop.c +++ b/lib/poll-loop.c @@ -100,6 +100,23 @@ poll_timer_wait(long long int msec) : msec); } +/* Causes the following call to poll_block() to wake up when the current time, + * as returned by time_msec(), reaches 'msec' or later. If 'msec' is earlier + * than the current time, the following call to poll_block() will not block at + * all. + * + * The timer registration is one-shot: only the following call to poll_block() + * is affected. The timer will need to be re-registered after poll_block() is + * called if it is to persist. */ +void +poll_timer_wait_until(long long int msec) +{ + long long int now = time_msec(); + poll_timer_wait__(msec <= now ? 0 + : msec < now + INT_MAX ? msec - now + : INT_MAX); +} + /* Causes the following call to poll_block() to wake up immediately, without * blocking. */ void