Fix AudioService rotation helper thread
Fix a race condition where the wait index can be incremented inbetween
the while() loop and the lock
Fix when updateOrientation() is called: after the sleep, otherwise
the last sleep is useless.
Bug 24677424
Change-Id: I03770a0fc8af57f4696ebee7e9c9110e17c55a24
diff --git a/services/core/java/com/android/server/audio/RotationHelper.java b/services/core/java/com/android/server/audio/RotationHelper.java
index f03e6c7..359cc36 100644
--- a/services/core/java/com/android/server/audio/RotationHelper.java
+++ b/services/core/java/com/android/server/audio/RotationHelper.java
@@ -192,16 +192,18 @@
}
public void run() {
- int newRotation;
while (mWaitCounter < WAIT_TIMES_MS.length) {
- updateOrientation();
int waitTimeMs;
synchronized(mCounterLock) {
- waitTimeMs = WAIT_TIMES_MS[mWaitCounter];
+ waitTimeMs = mWaitCounter < WAIT_TIMES_MS.length ?
+ WAIT_TIMES_MS[mWaitCounter] : 0;
mWaitCounter++;
}
try {
- sleep(waitTimeMs);
+ if (waitTimeMs > 0) {
+ sleep(waitTimeMs);
+ updateOrientation();
+ }
} catch (InterruptedException e) { }
}
}