Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 03c10c71 authored by Sean Stout's avatar Sean Stout
Browse files

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
parent f9060291
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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) {