summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--thread.c5
-rw-r--r--win32/win32.c2
3 files changed, 13 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index fef9f47ee4..a2c9ac92b2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Fri May 21 01:06:05 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * 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].
+
Thu May 20 22:49:04 2010 Yusuke Endoh <mame@tsg.ne.jp>
* re.c (rb_reg_s_union_m): update rdoc. [ruby-dev:41354]
diff --git a/thread.c b/thread.c
index f6b3b67df4..1956721da7 100644
--- a/thread.c
+++ b/thread.c
@@ -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
diff --git a/win32/win32.c b/win32/win32.c
index b60ea8cadd..bd4aa3ce30 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -2467,7 +2467,7 @@ subtract(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;
}
static inline int