diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java index 99fce9ce0e559..2c6f0c91ee7d1 100644 --- a/location/java/android/location/LocationManager.java +++ b/location/java/android/location/LocationManager.java @@ -2448,9 +2448,15 @@ public class LocationManager { } public void cancel() { + remove(); + } + + private Consumer remove() { + Consumer consumer; ICancellationSignal cancellationSignal; synchronized (this) { mExecutor = null; + consumer = mConsumer; mConsumer = null; if (mAlarmManager != null) { @@ -2470,6 +2476,8 @@ public class LocationManager { // ignore } } + + return consumer; } public void fail() { @@ -2528,16 +2536,10 @@ public class LocationManager { } private void acceptResult(Location location) { - Consumer consumer; - synchronized (this) { - if (mConsumer == null) { - return; - } - consumer = mConsumer; - cancel(); + Consumer consumer = remove(); + if (consumer != null) { + consumer.accept(location); } - - consumer.accept(location); } }