From dd295df6439ebc4e87e9f7b269ae39b15a5886b3 Mon Sep 17 00:00:00 2001 From: Etan Cohen Date: Wed, 20 Jan 2021 21:04:02 -0800 Subject: [PATCH] [Provider Model] Check against race condition There can be a race condition of the timeout and operation completion both getting executed - both setting the callback to null - which causes the other one to have an NPE. Bug: 175084231 Test: Testing rapid succession recovery operations Change-Id: If9d8418f1535d0e075c4abf2723c4b2734e8fa1a --- .../ConnectivitySubsystemsRecoveryManager.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/connectivity/ConnectivitySubsystemsRecoveryManager.java b/packages/SettingsLib/src/com/android/settingslib/connectivity/ConnectivitySubsystemsRecoveryManager.java index 02d1c2e65c8dc..64cb0f1b7885f 100644 --- a/packages/SettingsLib/src/com/android/settingslib/connectivity/ConnectivitySubsystemsRecoveryManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/connectivity/ConnectivitySubsystemsRecoveryManager.java @@ -210,7 +210,8 @@ public class ConnectivitySubsystemsRecoveryManager { } private void checkIfAllSubsystemsRestartsAreDone() { - if (!mWifiRestartInProgress && !mTelephonyRestartInProgress) { + if (!mWifiRestartInProgress && !mTelephonyRestartInProgress + && mCurrentRecoveryCallback != null) { mCurrentRecoveryCallback.onSubsystemRestartOperationEnd(); mCurrentRecoveryCallback = null; } @@ -283,8 +284,10 @@ public class ConnectivitySubsystemsRecoveryManager { stopTrackingTelephonyRestart(); mWifiRestartInProgress = false; mTelephonyRestartInProgress = false; - mCurrentRecoveryCallback.onSubsystemRestartOperationEnd(); - mCurrentRecoveryCallback = null; + if (mCurrentRecoveryCallback != null) { + mCurrentRecoveryCallback.onSubsystemRestartOperationEnd(); + mCurrentRecoveryCallback = null; + } }, RESTART_TIMEOUT_MS); } });