diff options
author | Soonil Nagarkar <sooniln@google.com> | 2020-06-11 11:58:23 -0700 |
---|---|---|
committer | Soonil Nagarkar <sooniln@google.com> | 2020-06-11 11:58:23 -0700 |
commit | 8bd4db2620d090c414954d135b2486ce515f1dc4 (patch) | |
tree | 908db29a4b9b51ac56369237a38dcca23b042819 /location/java | |
parent | d4952538cc318aaf80f52fea4c985e5b34ff4aa4 (diff) |
Fix deadlock for system location clients
Bug: 158637743
Test: manual
Change-Id: I0fd2f2ac8cc4c81014e67d1115a2343b95b7cecf
Diffstat (limited to 'location/java')
-rw-r--r-- | location/java/android/location/LocationManager.java | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java index a112bdd0ce03..7d15bbd46697 100644 --- a/location/java/android/location/LocationManager.java +++ b/location/java/android/location/LocationManager.java @@ -2583,9 +2583,15 @@ public class LocationManager { } public void cancel() { + remove(); + } + + private Consumer<Location> remove() { + Consumer<Location> consumer; ICancellationSignal cancellationSignal; synchronized (this) { mExecutor = null; + consumer = mConsumer; mConsumer = null; if (mAlarmManager != null) { @@ -2605,6 +2611,8 @@ public class LocationManager { // ignore } } + + return consumer; } public void fail() { @@ -2663,16 +2671,10 @@ public class LocationManager { } private void acceptResult(Location location) { - Consumer<Location> consumer; - synchronized (this) { - if (mConsumer == null) { - return; - } - consumer = mConsumer; - cancel(); + Consumer<Location> consumer = remove(); + if (consumer != null) { + consumer.accept(location); } - - consumer.accept(location); } } |