From f28f9e3ea83a52586ed074dc242a80ce388bfc2d Mon Sep 17 00:00:00 2001 From: Xiaohui Niu Date: Tue, 4 Jun 2024 14:27:46 +0800 Subject: Fix NPE in UiAutomationManager Fix a race condition that UiAutomationService is destroyed just before main thread processes the connection. Bug: 328277279 Test: UiAutomationManagerTest Merged-In: I0352ad255930ed58c111d5733e7ca2ae75fdf8fa Change-Id: I0352ad255930ed58c111d5733e7ca2ae75fdf8fa --- .../java/com/android/server/accessibility/UiAutomationManager.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/services/accessibility/java/com/android/server/accessibility/UiAutomationManager.java b/services/accessibility/java/com/android/server/accessibility/UiAutomationManager.java index f69104db7c10..3b9340b2402b 100644 --- a/services/accessibility/java/com/android/server/accessibility/UiAutomationManager.java +++ b/services/accessibility/java/com/android/server/accessibility/UiAutomationManager.java @@ -274,8 +274,10 @@ class UiAutomationManager { mMainHandler.post(() -> { try { final IAccessibilityServiceClient serviceInterface; + final UiAutomationService uiAutomationService; synchronized (mLock) { serviceInterface = mServiceInterface; + uiAutomationService = mUiAutomationService; if (serviceInterface == null) { mService = null; } else { @@ -286,8 +288,8 @@ class UiAutomationManager { // If the serviceInterface is null, the UiAutomation has been shut down on // another thread. if (serviceInterface != null) { - if (Flags.addWindowTokenWithoutLock()) { - mUiAutomationService.addWindowTokensForAllDisplays(); + if (Flags.addWindowTokenWithoutLock() && uiAutomationService != null) { + uiAutomationService.addWindowTokensForAllDisplays(); } if (mTrace.isA11yTracingEnabledForTypes( AccessibilityTrace.FLAGS_ACCESSIBILITY_SERVICE_CLIENT)) { -- cgit v1.2.3-59-g8ed1b