Skip to content

Commit 04a286b

Browse files
Jeff BrownAndroid (Google) Code Review
authored andcommitted
Merge "Fix GpsLocationProvider wake lock book keeping." into jb-mr1-dev
2 parents f85ddd6 + 028872f commit 04a286b

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

services/java/com/android/server/location/GpsLocationProvider.java

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,8 @@ private void handleInjectNtpTime() {
598598
}
599599
mInjectNtpTimePending = STATE_DOWNLOADING;
600600

601+
// hold wake lock while task runs
602+
mWakeLock.acquire();
601603
AsyncTask.THREAD_POOL_EXECUTOR.execute(new Runnable() {
602604
@Override
603605
public void run() {
@@ -628,14 +630,16 @@ public void run() {
628630
delay = RETRY_INTERVAL;
629631
}
630632

631-
mHandler.sendMessage(Message.obtain(mHandler, INJECT_NTP_TIME_FINISHED));
633+
sendMessage(INJECT_NTP_TIME_FINISHED, 0, null);
632634

633635
if (mPeriodicTimeInjection) {
634636
// send delayed message for next NTP injection
635637
// since this is delayed and not urgent we do not hold a wake lock here
636-
mHandler.removeMessages(INJECT_NTP_TIME);
637-
mHandler.sendMessageDelayed(Message.obtain(mHandler, INJECT_NTP_TIME), delay);
638+
mHandler.sendEmptyMessageDelayed(INJECT_NTP_TIME, delay);
638639
}
640+
641+
// release wake lock held by task
642+
mWakeLock.release();
639643
}
640644
});
641645
}
@@ -652,6 +656,8 @@ private void handleDownloadXtraData() {
652656
}
653657
mDownloadXtraDataPending = STATE_DOWNLOADING;
654658

659+
// hold wake lock while task runs
660+
mWakeLock.acquire();
655661
AsyncTask.THREAD_POOL_EXECUTOR.execute(new Runnable() {
656662
@Override
657663
public void run() {
@@ -664,17 +670,17 @@ public void run() {
664670
native_inject_xtra_data(data, data.length);
665671
}
666672

667-
mHandler.sendMessage(Message.obtain(mHandler, DOWNLOAD_XTRA_DATA_FINISHED));
673+
sendMessage(DOWNLOAD_XTRA_DATA_FINISHED, 0, null);
668674

669675
if (data == null) {
670676
// try again later
671677
// since this is delayed and not urgent we do not hold a wake lock here
672-
mHandler.removeMessages(DOWNLOAD_XTRA_DATA);
673-
mHandler.sendMessageDelayed(Message.obtain(mHandler, DOWNLOAD_XTRA_DATA),
674-
RETRY_INTERVAL);
678+
mHandler.sendEmptyMessageDelayed(DOWNLOAD_XTRA_DATA, RETRY_INTERVAL);
675679
}
676-
}
677680

681+
// release wake lock held by task
682+
mWakeLock.release();
683+
}
678684
});
679685
}
680686

@@ -1475,11 +1481,17 @@ private void requestRefLocation(int flags) {
14751481

14761482
private void sendMessage(int message, int arg, Object obj) {
14771483
// hold a wake lock until this message is delivered
1484+
// note that this assumes the message will not be removed from the queue before
1485+
// it is handled (otherwise the wake lock would be leaked).
14781486
mWakeLock.acquire();
14791487
mHandler.obtainMessage(message, arg, 1, obj).sendToTarget();
14801488
}
14811489

14821490
private final class ProviderHandler extends Handler {
1491+
public ProviderHandler() {
1492+
super(true /*async*/);
1493+
}
1494+
14831495
@Override
14841496
public void handleMessage(Message msg) {
14851497
int message = msg.what;

0 commit comments

Comments
 (0)