From 609cc387bb9c362c69da94c6fba7ee601b0469df Mon Sep 17 00:00:00 2001 From: Yu-Han Yang Date: Wed, 12 Apr 2023 17:25:23 +0000 Subject: [PATCH] Fix NPE when re-registerNetworkCallbacks If handleInitialize() has not finished yet, mNetworkConnectivityCallback would be null. Bug: 277853506 Test: manual Change-Id: I7d51429c614b0046c62a84ed274031d722e2fef0 --- .../location/gnss/GnssLocationProvider.java | 15 +++++++++++++-- .../gnss/GnssNetworkConnectivityHandler.java | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java b/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java index e48412ab40292..47d6d8e4eeb45 100644 --- a/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java +++ b/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java @@ -271,6 +271,10 @@ public class GnssLocationProvider extends AbstractLocationProvider implements private long mStartedChangedElapsedRealtime; private int mFixInterval = 1000; + // True if handleInitialize() has finished; + @GuardedBy("mLock") + private boolean mInitialized; + private ProviderRequest mProviderRequest; private int mPositionMode; @@ -569,6 +573,9 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } updateEnabled(); + synchronized (mLock) { + mInitialized = true; + } } private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { @@ -1714,8 +1721,12 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } // Re-register network callbacks to get an update of available networks right away. - mNetworkConnectivityHandler.unregisterNetworkCallbacks(); - mNetworkConnectivityHandler.registerNetworkCallbacks(); + synchronized (mLock) { + if (mInitialized) { + mNetworkConnectivityHandler.unregisterNetworkCallbacks(); + mNetworkConnectivityHandler.registerNetworkCallbacks(); + } + } } @Override diff --git a/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java b/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java index a7fffe2ddf29a..c0cce6f320291 100644 --- a/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java +++ b/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java @@ -303,6 +303,7 @@ class GnssNetworkConnectivityHandler { void unregisterNetworkCallbacks() { mConnMgr.unregisterNetworkCallback(mNetworkConnectivityCallback); + mNetworkConnectivityCallback = null; } /**