summaryrefslogtreecommitdiff
path: root/location/java
diff options
context:
space:
mode:
author Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2020-03-03 03:23:00 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2020-03-03 03:23:00 +0000
commit5d2e7f95e9524ff1bebd61f5c612a9775f92df2f (patch)
tree3b04983b8c2cdeb8c4f4cd1dcffa1c3717ae0e3b /location/java
parent644cdfa4d4a518cc67dffcdf7722072d030c1f9a (diff)
parent4ec5b2f0ffcb91b41ccf1b313d8dce46c106253c (diff)
Merge "Quick fix for possible deadlock in LMS" into rvc-dev am: 45b8146ae8 am: 98c1646443 am: 4ec5b2f0ff
Change-Id: I939ba1ae9f42a575553fb331d82ac7d946afa34d
Diffstat (limited to 'location/java')
-rw-r--r--location/java/android/location/LocationManager.java24
1 files changed, 15 insertions, 9 deletions
diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java
index 6028a8a90141..e2309178b297 100644
--- a/location/java/android/location/LocationManager.java
+++ b/location/java/android/location/LocationManager.java
@@ -2562,22 +2562,28 @@ public class LocationManager {
mRemoteCancellationSignal = remoteCancellationSignal;
}
- public synchronized void cancel() {
- mExecutor = null;
- mConsumer = null;
+ public void cancel() {
+ ICancellationSignal cancellationSignal;
+ synchronized (this) {
+ mExecutor = null;
+ mConsumer = null;
- if (mAlarmManager != null) {
- mAlarmManager.cancel(this);
- mAlarmManager = null;
+ if (mAlarmManager != null) {
+ mAlarmManager.cancel(this);
+ mAlarmManager = null;
+ }
+
+ // ensure only one cancel event will go through
+ cancellationSignal = mRemoteCancellationSignal;
+ mRemoteCancellationSignal = null;
}
- if (mRemoteCancellationSignal != null) {
+ if (cancellationSignal != null) {
try {
- mRemoteCancellationSignal.cancel();
+ cancellationSignal.cancel();
} catch (RemoteException e) {
// ignore
}
- mRemoteCancellationSignal = null;
}
}