diff options
author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-05-20 16:13:35 +0000 |
---|---|---|
committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-05-20 16:13:35 +0000 |
commit | f82a6840a80e42e823a455ef3eb726a6b67e5485 (patch) | |
tree | 3c46c003c07ae8e08f42b2b1692baa3bb56570b0 /thread.c | |
parent | 268f95bdc653552a16ee4611a4d6dd84fcfb817f (diff) |
* thread.c (subtract_tv): if the rest is zero, should finish waiting
immediately.
* win32/win32.c (subtract): ditto.
based on a patch from Roger Pack in [ruby-core:27957].
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27930 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'thread.c')
-rw-r--r-- | thread.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -2411,6 +2411,9 @@ cmp_tv(const struct timeval *a, const struct timeval *b) static int subtract_tv(struct timeval *rest, const struct timeval *wait) { + if (rest->tv_sec < wait->tv_sec) { + return 0; + } while (rest->tv_usec < wait->tv_usec) { if (rest->tv_sec <= wait->tv_sec) { return 0; @@ -2420,7 +2423,7 @@ subtract_tv(struct timeval *rest, const struct timeval *wait) } rest->tv_sec -= wait->tv_sec; rest->tv_usec -= wait->tv_usec; - return 1; + return rest->tv_sec != 0 || rest->tv_usec != 0; } #endif |