From 207700d857cbaedca6ed19af74b29eae12988644 Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Wed, 16 Sep 2009 15:10:30 -0700 Subject: [PATCH] Fix issue #2121993: com.android.unit_tests.os.HandlerThreadTest:testHandlerThread is failing Change-Id: I5f2cc8b39d3f15782e5fbf47015be9f4fa94a65b --- .../unit_tests/os/HandlerThreadTest.java | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/HandlerThreadTest.java b/tests/AndroidTests/src/com/android/unit_tests/os/HandlerThreadTest.java index c62f94f4fcf91..f2025c6b91db6 100644 --- a/tests/AndroidTests/src/com/android/unit_tests/os/HandlerThreadTest.java +++ b/tests/AndroidTests/src/com/android/unit_tests/os/HandlerThreadTest.java @@ -36,8 +36,11 @@ public class HandlerThreadTest extends TestCase { public void testHandlerThread() throws Exception { HandlerThread th1 = new HandlerThread("HandlerThreadTest") { protected void onLooperPrepared() { - mDidSetup = true; - mLooperTid = Process.myTid(); + synchronized (HandlerThreadTest.this) { + mDidSetup = true; + mLooperTid = Process.myTid(); + HandlerThreadTest.this.notify(); + } } }; @@ -49,14 +52,23 @@ public class HandlerThreadTest extends TestCase { assertTrue(th1.isAlive()); assertNotNull(th1.getLooper()); - /* - * Since getLooper() will block until the HandlerThread is setup, we are guaranteed - * that mDidSetup and mLooperTid will have been initalized. If they have not, then - * this test should fail - */ + // The call to getLooper() internally blocks until the looper is + // available, but will call onLooperPrepared() after that. So we + // need to block here to wait for our onLooperPrepared() to complete + // and fill in the values we expect. + synchronized (this) { + while (!mDidSetup) { + try { + wait(); + } catch (InterruptedException e) { + } + } + } + + // Make sure that the process was set. + assertNotSame(-1, mLooperTid); // Make sure that the onLooperPrepared() was called on a different thread. assertNotSame(Process.myTid(), mLooperTid); - assertTrue(mDidSetup); final Handler h1 = new Handler(th1.getLooper()) { public void handleMessage(Message msg) {