From 69515b2261335be4bd8510ed5a40a6bed3d7b48f Mon Sep 17 00:00:00 2001 From: Erik Wolsheimer Date: Wed, 17 May 2017 11:20:43 -0700 Subject: [PATCH] Fix race condition triggered by quick stop/start of Dream Bug: 28455483 Change-Id: I20de24c68e468e61bb8fc704bacf73dc6df63b0a --- .../android/server/dreams/DreamManagerService.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/dreams/DreamManagerService.java b/services/core/java/com/android/server/dreams/DreamManagerService.java index 79a4deebc3da9..cbc1039f82cb7 100644 --- a/services/core/java/com/android/server/dreams/DreamManagerService.java +++ b/services/core/java/com/android/server/dreams/DreamManagerService.java @@ -86,6 +86,7 @@ public final class DreamManagerService extends SystemService { private boolean mCurrentDreamCanDoze; private boolean mCurrentDreamIsDozing; private boolean mCurrentDreamIsWaking; + private Runnable mStopDreamRunnable; private int mCurrentDreamDozeScreenState = Display.STATE_UNKNOWN; private int mCurrentDreamDozeScreenBrightness = PowerManager.BRIGHTNESS_DEFAULT; @@ -349,6 +350,11 @@ public final class DreamManagerService extends SystemService { private void startDreamLocked(final ComponentName name, final boolean isTest, final boolean canDoze, final int userId) { + if (mStopDreamRunnable != null) { + mHandler.removeCallbacks(mStopDreamRunnable); + mStopDreamRunnable = null; + } + if (Objects.equal(mCurrentDreamName, name) && mCurrentDreamIsTest == isTest && mCurrentDreamCanDoze == canDoze @@ -386,13 +392,15 @@ public final class DreamManagerService extends SystemService { mCurrentDreamIsWaking = true; } - mHandler.post(new Runnable() { + mStopDreamRunnable = new Runnable() { @Override public void run() { Slog.i(TAG, "Performing gentle wake from dream."); mController.stopDream(immediate); + mStopDreamRunnable = null; } - }); + }; + mHandler.post(mStopDreamRunnable); } }