summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jeff Brown <jeffbrown@google.com> 2012-08-25 13:44:46 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2012-08-25 13:44:51 -0700
commit04a286b95528e1fe7c0a18e8780a64bfadbd1eba (patch)
treed6b9605f9ab9cb35cf593a2f00a8a040f472f5aa
parentf85ddd6571c9084b76d874f79245d087b152cb67 (diff)
parent028872fe07f9b3468aa1506c658d6aae25f53015 (diff)
Merge "Fix GpsLocationProvider wake lock book keeping." into jb-mr1-dev
-rwxr-xr-xservices/java/com/android/server/location/GpsLocationProvider.java28
1 files changed, 20 insertions, 8 deletions
diff --git a/services/java/com/android/server/location/GpsLocationProvider.java b/services/java/com/android/server/location/GpsLocationProvider.java
index 32b3597fa4aa..c2c0a71f218d 100755
--- a/services/java/com/android/server/location/GpsLocationProvider.java
+++ b/services/java/com/android/server/location/GpsLocationProvider.java
@@ -598,6 +598,8 @@ public class GpsLocationProvider implements LocationProviderInterface {
}
mInjectNtpTimePending = STATE_DOWNLOADING;
+ // hold wake lock while task runs
+ mWakeLock.acquire();
AsyncTask.THREAD_POOL_EXECUTOR.execute(new Runnable() {
@Override
public void run() {
@@ -628,14 +630,16 @@ public class GpsLocationProvider implements LocationProviderInterface {
delay = RETRY_INTERVAL;
}
- mHandler.sendMessage(Message.obtain(mHandler, INJECT_NTP_TIME_FINISHED));
+ sendMessage(INJECT_NTP_TIME_FINISHED, 0, null);
if (mPeriodicTimeInjection) {
// send delayed message for next NTP injection
// since this is delayed and not urgent we do not hold a wake lock here
- mHandler.removeMessages(INJECT_NTP_TIME);
- mHandler.sendMessageDelayed(Message.obtain(mHandler, INJECT_NTP_TIME), delay);
+ mHandler.sendEmptyMessageDelayed(INJECT_NTP_TIME, delay);
}
+
+ // release wake lock held by task
+ mWakeLock.release();
}
});
}
@@ -652,6 +656,8 @@ public class GpsLocationProvider implements LocationProviderInterface {
}
mDownloadXtraDataPending = STATE_DOWNLOADING;
+ // hold wake lock while task runs
+ mWakeLock.acquire();
AsyncTask.THREAD_POOL_EXECUTOR.execute(new Runnable() {
@Override
public void run() {
@@ -664,17 +670,17 @@ public class GpsLocationProvider implements LocationProviderInterface {
native_inject_xtra_data(data, data.length);
}
- mHandler.sendMessage(Message.obtain(mHandler, DOWNLOAD_XTRA_DATA_FINISHED));
+ sendMessage(DOWNLOAD_XTRA_DATA_FINISHED, 0, null);
if (data == null) {
// try again later
// since this is delayed and not urgent we do not hold a wake lock here
- mHandler.removeMessages(DOWNLOAD_XTRA_DATA);
- mHandler.sendMessageDelayed(Message.obtain(mHandler, DOWNLOAD_XTRA_DATA),
- RETRY_INTERVAL);
+ mHandler.sendEmptyMessageDelayed(DOWNLOAD_XTRA_DATA, RETRY_INTERVAL);
}
- }
+ // release wake lock held by task
+ mWakeLock.release();
+ }
});
}
@@ -1475,11 +1481,17 @@ public class GpsLocationProvider implements LocationProviderInterface {
private void sendMessage(int message, int arg, Object obj) {
// hold a wake lock until this message is delivered
+ // note that this assumes the message will not be removed from the queue before
+ // it is handled (otherwise the wake lock would be leaked).
mWakeLock.acquire();
mHandler.obtainMessage(message, arg, 1, obj).sendToTarget();
}
private final class ProviderHandler extends Handler {
+ public ProviderHandler() {
+ super(true /*async*/);
+ }
+
@Override
public void handleMessage(Message msg) {
int message = msg.what;