diff options
| author | 2020-03-03 03:23:00 +0000 | |
|---|---|---|
| committer | 2020-03-03 03:23:00 +0000 | |
| commit | 5d2e7f95e9524ff1bebd61f5c612a9775f92df2f (patch) | |
| tree | 3b04983b8c2cdeb8c4f4cd1dcffa1c3717ae0e3b /location/java | |
| parent | 644cdfa4d4a518cc67dffcdf7722072d030c1f9a (diff) | |
| parent | 4ec5b2f0ffcb91b41ccf1b313d8dce46c106253c (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.java | 24 |
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; } } |