Fix race condition triggered by quick stop/start of Dream
If a Dream was running, then stopped and restarted in quick succession it was possible for it to fail to restart. It would do this because before starting a dream, there is a check to ensure that the requested dream is not already running. All dreams are started and stopped on a handler thread, because of this it is possible for the dream to still be running when #stopDream is called followed immediately by #startDream. This CL changes the check at the beginning of #startDreamLocked to ensure that the current dream is not in the process of waking before returning early which prevents this error from happening. Bug: 181523689 Test: adb shell input keyevent KEYCODE_WAKEUP && \ sleep .02 && \ adb shell input keyevent KEYCODE_SLEEP Change-Id: I0ba6f630f114df18c49e65ac1a72c8040db64817
This commit is contained in:
@@ -394,7 +394,8 @@ public final class DreamManagerService extends SystemService {
|
||||
|
||||
private void startDreamLocked(final ComponentName name,
|
||||
final boolean isTest, final boolean canDoze, final int userId) {
|
||||
if (Objects.equals(mCurrentDreamName, name)
|
||||
if (!mCurrentDreamIsWaking
|
||||
&& Objects.equals(mCurrentDreamName, name)
|
||||
&& mCurrentDreamIsTest == isTest
|
||||
&& mCurrentDreamCanDoze == canDoze
|
||||
&& mCurrentDreamUserId == userId) {
|
||||
|
||||
Reference in New Issue
Block a user