diff --git a/gthread/ChangeLog b/gthread/ChangeLog index c306b3954..8b98a12fb 100644 --- a/gthread/ChangeLog +++ b/gthread/ChangeLog @@ -1,3 +1,10 @@ +2002-11-23 Tor Lillqvist + + * 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 * gthread-posix.c gthread-solaris.c: Include diff --git a/gthread/gthread-win32.c b/gthread/gthread-win32.c index 18681ada2..358ba6eb3 100644 --- a/gthread/gthread-win32.c +++ b/gthread/gthread-win32.c @@ -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 (¤t_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 (¤t_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); }