diff options
| author | 2020-06-10 18:15:07 +0000 | |
|---|---|---|
| committer | 2020-06-10 18:15:07 +0000 | |
| commit | 8d4cef5e43465bc0dc5bbb236a91afa6a210ead5 (patch) | |
| tree | c9d66644286b062ab1c2ff30399e70e72e3b828d | |
| parent | 18bb8d11a69feaad6650b90412dcdba4c021658b (diff) | |
| parent | 5a0a1d95ab4a8863fbb790fbf620ed8965db0270 (diff) | |
Merge "DO NOT MERGE: Do not hold mLock when calling GNSS HAL" into rvc-dev
| -rw-r--r-- | services/core/java/com/android/server/location/LocationManagerService.java | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/location/LocationManagerService.java b/services/core/java/com/android/server/location/LocationManagerService.java index 067bdcb111fb..bfcbe465a271 100644 --- a/services/core/java/com/android/server/location/LocationManagerService.java +++ b/services/core/java/com/android/server/location/LocationManagerService.java @@ -231,7 +231,7 @@ public class LocationManagerService extends ILocationManager.Stub { private final AppForegroundHelper mAppForegroundHelper; private final LocationUsageLogger mLocationUsageLogger; - @Nullable private GnssManagerService mGnssManagerService = null; + @Nullable private volatile GnssManagerService mGnssManagerService = null; private final PassiveLocationProviderManager mPassiveManager; @@ -381,6 +381,10 @@ public class LocationManagerService extends ILocationManager.Stub { // prepare providers initializeProvidersLocked(); } + + // initialize gnss last because it has no awareness of boot phases and blindly assumes that + // all other location providers are loaded at initialization + initializeGnss(); } private void onAppOpChanged(String packageName) { @@ -602,16 +606,19 @@ public class LocationManagerService extends ILocationManager.Stub { } manager.setMockProvider(new MockProvider(properties)); } + } - // initialize gnss last because it has no awareness of boot phases and blindly assumes that - // all other location providers are loaded at initialization + private void initializeGnss() { + // Do not hold mLock when calling GnssManagerService#isGnssSupported() which calls into HAL. if (GnssManagerService.isGnssSupported()) { mGnssManagerService = new GnssManagerService(mContext, mAppOpsHelper, mSettingsHelper, mAppForegroundHelper, mLocationUsageLogger); mGnssManagerService.onSystemReady(); LocationProviderManager gnssManager = new LocationProviderManager(GPS_PROVIDER); - mProviderManagers.add(gnssManager); + synchronized (mLock) { + mProviderManagers.add(gnssManager); + } gnssManager.setRealProvider(mGnssManagerService.getGnssLocationProvider()); // bind to geofence proxy |