From 4d7a38588911bf7de3803ea7d53783d3a89bd2f2 Mon Sep 17 00:00:00 2001 From: Mike Lockwood <> Date: Tue, 31 Mar 2009 13:59:40 -0700 Subject: [PATCH] AI 143648: am: CL 143616 Fix ANR that could occur when disabling GPS in Settings while the GPS is active. Exit from GpsEventThread immediately when the GPS is disabled instead of waiting for the GPS to shut down fully. BUG=1729031 Original author: lockwood Merged from: //branches/donutburger/... Automated import of CL 143648 --- .../android/internal/location/GpsLocationProvider.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/location/java/com/android/internal/location/GpsLocationProvider.java b/location/java/com/android/internal/location/GpsLocationProvider.java index 887574a66bad1..f5950501d5107 100644 --- a/location/java/com/android/internal/location/GpsLocationProvider.java +++ b/location/java/com/android/internal/location/GpsLocationProvider.java @@ -412,6 +412,12 @@ public class GpsLocationProvider extends LocationProviderImpl { mNetworkThread = null; } + // The GpsEventThread does not wait for the GPS to shutdown + // so we need to report the GPS_STATUS_ENGINE_OFF event here + if (mNavigating) { + reportStatus(GPS_STATUS_ENGINE_OFF); + } + native_cleanup(); } @@ -797,8 +803,8 @@ public class GpsLocationProvider extends LocationProviderImpl { public void run() { if (Config.LOGD) Log.d(TAG, "GpsEventThread starting"); - // thread exits after disable() is called and navigation has stopped - while (mEnabled || mNavigating) { + // Exit as soon as disable() is called instead of waiting for the GPS to stop. + while (mEnabled) { // this will wait for an event from the GPS, // which will be reported via reportLocation or reportStatus native_wait_for_event();