Fix two bugs: 1) If abs_time is NULL, should use infinite time. 2) Check
authorTor Lillqvist <tml@iki.fi>
Mon, 25 Nov 2002 23:08:27 +0000 (23:08 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Mon, 25 Nov 2002 23:08:27 +0000 (23:08 +0000)
2002-11-23  Tor Lillqvist  <tml@iki.fi>

* gthread-win32.c (g_cond_timed_wait_win32_impl): Fix two bugs: 1)
If abs_time is NULL, should use infinite time. 2) Check for
current time already being past abs_time. (#99294, Christopher
R. Palmer, fix by Sebastian Wilhelmi)

gthread/ChangeLog
gthread/gthread-win32.c

index c306b39..8b98a12 100644 (file)
@@ -1,3 +1,10 @@
+2002-11-23  Tor Lillqvist  <tml@iki.fi>
+
+       * gthread-win32.c (g_cond_timed_wait_win32_impl): Fix two bugs: 1)
+       If abs_time is NULL, should use infinite time. 2) Check for
+       current time already being past abs_time. (#99294, Christopher
+       R. Palmer, fix by Sebastian Wilhelmi)
+
 Mon Nov  4 14:45:24 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gthread-posix.c gthread-solaris.c: Include <config.h>
index 18681ad..358ba6e 100644 (file)
@@ -291,10 +291,20 @@ g_cond_timed_wait_win32_impl (GCond *cond,
   g_return_val_if_fail (cond != NULL, FALSE);
   g_return_val_if_fail (entered_mutex != NULL, FALSE);
 
-  g_get_current_time (&current_time);
-  to_wait = (abs_time->tv_sec - current_time.tv_sec) * 1000 +
-    (abs_time->tv_usec - current_time.tv_usec) / 1000;
-
+  if (!abs_time)
+    to_wait = INFINITE;
+  else
+    {
+      g_get_current_time (&current_time);
+      if (abs_time->tv_sec < current_time.tv_sec ||
+         (abs_time->tv_sec == current_time.tv_sec &&
+          abs_time->tv_usec <= current_time.tv_usec))
+       to_wait = 0;
+      else
+       to_wait = (abs_time->tv_sec - current_time.tv_sec) * 1000 +
+         (abs_time->tv_usec - current_time.tv_usec) / 1000;      
+    }
+  
   return g_cond_wait_internal (cond, entered_mutex, to_wait);
 }