diff options
author | Eric Wong <normalperson@yhbt.net> | 2011-05-20 19:50:34 -0700 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2011-05-20 19:52:05 -0700 |
commit | f809a87f70f0937a87b5d3a83704847daceef4dd (patch) | |
tree | 0c6d46a274b9de7b2676a13927ff033b4b3580fd /ext/kgio/poll.c | |
parent | ab732113e13f1690fd2c1a18d1c66beb7864d847 (diff) | |
download | kgio-f809a87f70f0937a87b5d3a83704847daceef4dd.tar.gz |
Retry on a zero timeout if we get interrupted even if the timeout expired. This is also what IO.select does in Ruby itself.
Diffstat (limited to 'ext/kgio/poll.c')
-rw-r--r-- | ext/kgio/poll.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/ext/kgio/poll.c b/ext/kgio/poll.c index 2f101d1..89f4623 100644 --- a/ext/kgio/poll.c +++ b/ext/kgio/poll.c @@ -40,8 +40,6 @@ static int retryable(struct poll_args *a) if (a->timeout < 0) return 1; - if (a->timeout == 0) - return 0; clock_gettime(hopefully_CLOCK_MONOTONIC, &ts); @@ -53,7 +51,9 @@ static int retryable(struct poll_args *a) } a->timeout -= ts.tv_sec * 1000; a->timeout -= ts.tv_nsec / 1000000; - return (a->timeout >= 0); + if (a->timeout < 0) + a->timeout = 0; + return 1; } static int num2timeout(VALUE timeout) |