Index: build/make/excludes/exclude.drlvm_kernel.windows.x86.int =================================================================== --- build/make/excludes/exclude.drlvm_kernel.windows.x86.int (revision 478766) +++ build/make/excludes/exclude.drlvm_kernel.windows.x86.int (working copy) @@ -1,13 +1,10 @@ ## These tests are too slow java/lang/RuntimeAdditionalTest*.java -## Tese tests are unstable and hang often +## These tests are unstable and hang often java/lang/RuntimeAdditionalTest11.java java/lang/RuntimeAdditionalTest34.java java/lang/RuntimeAdditionalTest39.java java/lang/RuntimeAdditionalTest40.java java/lang/RuntimeAdditionalTest41.java java/lang/RuntimeAdditionalTest42.java - -java/lang/ObjectTest.java - Index: build/make/excludes/exclude.drlvm_kernel.windows.x86.opt =================================================================== --- build/make/excludes/exclude.drlvm_kernel.windows.x86.opt (revision 478766) +++ build/make/excludes/exclude.drlvm_kernel.windows.x86.opt (working copy) @@ -1,13 +1,10 @@ ## These tests are too slow java/lang/RuntimeAdditionalTest*.java -## Tese tests are unstable and hang often +## These tests are unstable and hang often java/lang/RuntimeAdditionalTest11.java java/lang/RuntimeAdditionalTest34.java java/lang/RuntimeAdditionalTest39.java java/lang/RuntimeAdditionalTest40.java java/lang/RuntimeAdditionalTest41.java java/lang/RuntimeAdditionalTest42.java - -java/lang/ObjectTest.java - Index: build/make/excludes/exclude.drlvm_kernel.windows.x86.jet =================================================================== --- build/make/excludes/exclude.drlvm_kernel.windows.x86.jet (revision 478766) +++ build/make/excludes/exclude.drlvm_kernel.windows.x86.jet (working copy) @@ -1,13 +1,10 @@ ## These tests are too slow java/lang/RuntimeAdditionalTest*.java -## Tese tests are unstable and hang often +## These tests are unstable and hang often java/lang/RuntimeAdditionalTest11.java java/lang/RuntimeAdditionalTest34.java java/lang/RuntimeAdditionalTest39.java java/lang/RuntimeAdditionalTest40.java java/lang/RuntimeAdditionalTest41.java java/lang/RuntimeAdditionalTest42.java - -java/lang/ObjectTest.java - Index: vm/tests/kernel/java/lang/ObjectTest.java =================================================================== --- vm/tests/kernel/java/lang/ObjectTest.java (revision 478766) +++ vm/tests/kernel/java/lang/ObjectTest.java (working copy) @@ -208,8 +208,11 @@ fail("The main thread was interrupted!"); } } - assertTrue("Current thread hasn't sleep enough!", - finish - start + 1 > millis); + long atLeastWait = millis - 1; + long actualWait = finish - start; + assertTrue("Current thread hasn't slept enough: " + + "expected at least " + atLeastWait + " but was " + actualWait, + actualWait >= atLeastWait); } public void testWaitlongint1() { @@ -277,6 +280,8 @@ public void run() { try { synchronized (o) { + threadStarted = true; + o.notify(); o.wait(); } } catch (InterruptedException e) { @@ -284,13 +289,15 @@ } } }; - t.start(); - for (int i = 0; !t.isAlive() && i < 60; i++) { - try { - Thread.sleep(50); - } catch (Exception e) { - fail("The main thread was interrupted!"); - } + try { + synchronized (o) { + t.start(); + while (!t.threadStarted) { + o.wait(); + } + } + } catch (InterruptedException e) { + fail("The main thread was interrupted!"); } assertTrue("thread must be alive", t.isAlive()); t.interrupt(); @@ -298,7 +305,7 @@ try { t.join(10); } catch (Exception e) { - fail("The main thread was interrupted!"); + fail("The main thread was interrupted_2!"); } } assertTrue("An InterruptedException must be thrown in test thread!", @@ -336,8 +343,8 @@ } private class TestThread extends Thread { - boolean srop = false; boolean flag = false; + volatile boolean threadStarted = false; } private class TestThread1 extends TestThread { Index: vm/thread/src/thread_native_condvar.c =================================================================== --- vm/thread/src/thread_native_condvar.c (revision 478766) +++ vm/thread/src/thread_native_condvar.c (working copy) @@ -68,7 +68,7 @@ // Delegate to OS wait apr_status = (!ms && !nano)? apr_thread_cond_wait((apr_thread_cond_t*)cond, (apr_thread_mutex_t*)mutex): - apr_thread_cond_timedwait ((apr_thread_cond_t*)cond, (apr_thread_mutex_t*)mutex, ms*1000+ nano / 1000); + apr_thread_cond_timedwait ((apr_thread_cond_t*)cond, (apr_thread_mutex_t*)mutex, ms*1000 + ((nano < 1000) ? 1 : (nano / 1000))); set_suspend_disable(disable_count);