diff --git a/libjava/ChangeLog b/libjava/ChangeLog index cd004eb88bf..d4031dc3a81 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,10 @@ +1999-08-17 Tom Tromey + + * java/lang/natThread.cc (sleep): Turn 0 millis and 0 nanos into 1 + nano. + * include/quick-threads.h (_Jv_CondWait): Don't round to 0 + inappropriately. + 1999-08-16 Tom Tromey * configure: Rebuilt. diff --git a/libjava/include/quick-threads.h b/libjava/include/quick-threads.h index 3ce8ece2168..4626add02f9 100644 --- a/libjava/include/quick-threads.h +++ b/libjava/include/quick-threads.h @@ -38,7 +38,11 @@ inline int _Jv_CondWait (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu, jlong millis, jint nanos) { - return coop_condition_variable_wait (cv, mu, millis * 1000 + nanos / 1000); + long micros = millis * 1000 + nanos / 1000; + // Don't round to 0 inappropriately. + if (! micros && (millis || nanos)) + micros = 1; + return coop_condition_variable_wait (cv, mu, micros); } inline int diff --git a/libjava/java/lang/natThread.cc b/libjava/java/lang/natThread.cc index 117191133a8..9dc192e12c4 100644 --- a/libjava/java/lang/natThread.cc +++ b/libjava/java/lang/natThread.cc @@ -214,6 +214,9 @@ java::lang::Thread::sleep (jlong millis, jint nanos) if (millis < 0 || nanos < 0 || nanos > 999999) _Jv_Throw (new IllegalArgumentException); + if (millis == 0 && nanos == 0) + ++nanos; + Thread *current = currentThread (); if (current->isInterrupted ()) _Jv_Throw (new InterruptedException);