summaryrefslogtreecommitdiffstats
path: root/src/com/android/providers/downloads/DownloadThread.java
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2017-09-28 14:41:38 -0600
committerJeff Sharkey <jsharkey@android.com>2017-09-28 14:41:40 -0600
commitb02470a0886c0466ec3fe201672dcfd0b3492155 (patch)
tree14c416e284bcee6cfe50e94a967156d7081e02f6 /src/com/android/providers/downloads/DownloadThread.java
parent87cd054358967b8d2670f15d2ecd1a27222f072d (diff)
downloadandroid_packages_providers_DownloadProvider-b02470a0886c0466ec3fe201672dcfd0b3492155.tar.gz
android_packages_providers_DownloadProvider-b02470a0886c0466ec3fe201672dcfd0b3492155.tar.bz2
android_packages_providers_DownloadProvider-b02470a0886c0466ec3fe201672dcfd0b3492155.zip
Prevent duplicate jobs for same download.
Before this CL, we could have started duplicate jobs for the same download ID in parallel. Now, we ignore duplicate jobs for the same download. This requires us to only reschedule a job after removing it from mActiveThreads, so slight refactoring there. Test: bit DownloadProviderTests:* Bug: 36227864 Change-Id: I3103480859c5eb9488817165187c5dae05b2d843
Diffstat (limited to 'src/com/android/providers/downloads/DownloadThread.java')
-rw-r--r--src/com/android/providers/downloads/DownloadThread.java5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/com/android/providers/downloads/DownloadThread.java b/src/com/android/providers/downloads/DownloadThread.java
index 9c920053..1476f4a0 100644
--- a/src/com/android/providers/downloads/DownloadThread.java
+++ b/src/com/android/providers/downloads/DownloadThread.java
@@ -384,6 +384,7 @@ public class DownloadThread extends Thread {
mNetworkPolicy.unregisterListener(mPolicyListener);
}
+ boolean needsReschedule = false;
if (Downloads.Impl.isStatusCompleted(mInfoDelta.mStatus)) {
if (mInfo.shouldScanFile(mInfoDelta.mStatus)) {
DownloadScanner.requestScanBlocking(mContext, mInfo.mId, mInfoDelta.mFileName,
@@ -392,10 +393,10 @@ public class DownloadThread extends Thread {
} else if (mInfoDelta.mStatus == STATUS_WAITING_TO_RETRY
|| mInfoDelta.mStatus == STATUS_WAITING_FOR_NETWORK
|| mInfoDelta.mStatus == STATUS_QUEUED_FOR_WIFI) {
- Helpers.scheduleJob(mContext, DownloadInfo.queryDownloadInfo(mContext, mId));
+ needsReschedule = true;
}
- mJobService.jobFinishedInternal(mParams, false);
+ mJobService.jobFinishedInternal(mParams, needsReschedule);
}
public void requestShutdown() {