diff options
author | Jeff Sharkey <jsharkey@android.com> | 2017-09-28 14:41:38 -0600 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2017-09-28 14:41:40 -0600 |
commit | b02470a0886c0466ec3fe201672dcfd0b3492155 (patch) | |
tree | 14c416e284bcee6cfe50e94a967156d7081e02f6 /src/com/android/providers/downloads/DownloadThread.java | |
parent | 87cd054358967b8d2670f15d2ecd1a27222f072d (diff) | |
download | android_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.java | 5 |
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() { |