From 6114f2bbb170177191d8f717a2b363713f8ca801 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Wed, 2 Mar 2016 21:47:42 +0900 Subject: [PATCH] Fix IdleableHandlerThread. Occasionally, ConnectivityServiceTest fails with "BUG: only one idle handler allowed". I have not been able to reproduce this consistently, but code inspection reveals an unsafe access to mIdleHandler inside queueIdle. Wrap that in a synchronized block. Change-Id: I27307e2e55fa8d937d7f043bd436894091c3c667 --- .../src/com/android/server/ConnectivityServiceTest.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java b/services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java index 69f12eb5b0..34f2e2e125 100644 --- a/services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java @@ -161,9 +161,11 @@ public class ConnectivityServiceTest extends AndroidTestCase { assertNull("BUG: only one idle handler allowed", mIdleHandler); mIdleHandler = new IdleHandler() { public boolean queueIdle() { - cv.open(); - mIdleHandler = null; - return false; // Remove the handler. + synchronized (queue) { + cv.open(); + mIdleHandler = null; + return false; // Remove the handler. + } } }; queue.addIdleHandler(mIdleHandler);