diff options
author | Steve Howard <showard@google.com> | 2010-07-20 12:04:02 -0700 |
---|---|---|
committer | Steve Howard <showard@google.com> | 2010-07-20 12:04:02 -0700 |
commit | 5180de23e77139dd6971dfd48269242e3e3562d9 (patch) | |
tree | ebcf27563c2eb44e821437b459f99f3b150e1454 /src/com/android/providers/downloads/DownloadService.java | |
parent | 071bd7acb3185f4f1e807855605c5e6018e9742f (diff) | |
download | android_packages_providers_DownloadProvider-5180de23e77139dd6971dfd48269242e3e3562d9.tar.gz android_packages_providers_DownloadProvider-5180de23e77139dd6971dfd48269242e3e3562d9.tar.bz2 android_packages_providers_DownloadProvider-5180de23e77139dd6971dfd48269242e3e3562d9.zip |
Fix bug with deciding when to restart a download.
In previous refactoring I had combined the code for starting a
download (from DownloadService.insertDownload()) and restarting a
download (from DownloadService.updateDownload()). I'd missed the fact
that the former checks DownloadInfo.isReadyToStart() while the latter
checks DownloadInfo.isReadyToRestart(). This cause a race condition
where multiple startService() calls during a download would cause the
service to try to spawn a second thread for the same running download.
I've fixed the bug and added a test case to exercise this.
Change-Id: Ia968331a030137daac7c8b5792a01e3e19065b38
Diffstat (limited to 'src/com/android/providers/downloads/DownloadService.java')
-rw-r--r-- | src/com/android/providers/downloads/DownloadService.java | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/com/android/providers/downloads/DownloadService.java b/src/com/android/providers/downloads/DownloadService.java index e474d4d7..f870954b 100644 --- a/src/com/android/providers/downloads/DownloadService.java +++ b/src/com/android/providers/downloads/DownloadService.java @@ -614,7 +614,9 @@ public class DownloadService extends Service { } } - info.startIfReady(now); + if (info.isReadyToStart(now)) { + info.start(now); + } } /** @@ -674,7 +676,9 @@ public class DownloadService extends Service { info.mMediaScanned = cursor.getInt(cursor.getColumnIndexOrThrow(Constants.MEDIA_SCANNED)) == 1; - info.startIfReady(now); + if (info.isReadyToRestart(now)) { + info.start(now); + } } /** |