From 0f9fc342ea8c9d3dc42f142323d682176d7a884d Mon Sep 17 00:00:00 2001 From: JW Wang Date: Fri, 29 Jan 2021 21:25:05 +0800 Subject: [PATCH] Register and unregister might be out of order (5/n) Calling unregisterHealthObserver() right after startObservingHealth() will fail to unregister observers correctly because startObservingHealth() do registration asynchronously. Let's do unregistration asynchronously as well to keep things in order. Bug: 178675924 Test: atest PackageWatchdogTest Change-Id: I7dfea957fb88f0346cdeea20e626a728ec1a1325 --- .../core/java/com/android/server/PackageWatchdog.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/PackageWatchdog.java b/services/core/java/com/android/server/PackageWatchdog.java index 16bc794dd36ad..41903fcd165f2 100644 --- a/services/core/java/com/android/server/PackageWatchdog.java +++ b/services/core/java/com/android/server/PackageWatchdog.java @@ -372,10 +372,12 @@ public class PackageWatchdog { * even from a previous boot. */ public void unregisterHealthObserver(PackageHealthObserver observer) { - synchronized (mLock) { - mAllObservers.remove(observer.getName()); - } - syncState("unregistering observer: " + observer.getName()); + mLongTaskHandler.post(() -> { + synchronized (mLock) { + mAllObservers.remove(observer.getName()); + } + syncState("unregistering observer: " + observer.getName()); + }); } /**