summaryrefslogtreecommitdiff
path: root/location/java
diff options
context:
space:
mode:
authorSoonil Nagarkar <sooniln@google.com>2020-06-11 11:58:23 -0700
committerSoonil Nagarkar <sooniln@google.com>2020-06-11 11:58:23 -0700
commit8bd4db2620d090c414954d135b2486ce515f1dc4 (patch)
tree908db29a4b9b51ac56369237a38dcca23b042819 /location/java
parentd4952538cc318aaf80f52fea4c985e5b34ff4aa4 (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.java20
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);
}
}