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
This commit is contained in:
Jean-Michel Trivi
2015-10-05 15:26:21 -07:00
parent faebbe82fa
commit 0155856a1d

View File

@@ -192,16 +192,18 @@ class RotationHelper {
}
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) { }
}
}