diff options
author | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-22 23:50:40 +0000 |
---|---|---|
committer | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-22 23:50:40 +0000 |
commit | 8ed01e32a8e827bf19c3f3ff4c82963a5aba85e1 (patch) | |
tree | c7e3e43357d42746a868045e82af2d989e64fe3d | |
parent | 3f668cbc83792f192cfb262bd7a720152ae0f450 (diff) | |
download | chromium_src-8ed01e32a8e827bf19c3f3ff4c82963a5aba85e1.zip chromium_src-8ed01e32a8e827bf19c3f3ff4c82963a5aba85e1.tar.gz chromium_src-8ed01e32a8e827bf19c3f3ff4c82963a5aba85e1.tar.bz2 |
Coverity: Fix a ctor/dtor leak by making |buffer_| a scoped_ptr and releasing
|buffer_| when DownloadFileManager takes ownership.
CID=13944
BUG=none
TEST=none
R=jcivelli@chromium.org
Review URL: http://codereview.chromium.org/6722001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@79073 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/renderer_host/download_resource_handler.cc | 10 | ||||
-rw-r--r-- | chrome/browser/renderer_host/download_resource_handler.h | 3 |
2 files changed, 6 insertions, 7 deletions
diff --git a/chrome/browser/renderer_host/download_resource_handler.cc b/chrome/browser/renderer_host/download_resource_handler.cc index 277e0c6..4f3f44b 100644 --- a/chrome/browser/renderer_host/download_resource_handler.cc +++ b/chrome/browser/renderer_host/download_resource_handler.cc @@ -157,7 +157,7 @@ bool DownloadResourceHandler::OnReadCompleted(int request_id, int* bytes_read) { NewRunnableMethod(download_file_manager_, &DownloadFileManager::UpdateDownload, download_id_, - buffer_)); + buffer_.get())); } // We schedule a pause outside of the read loop if there is too much file @@ -176,16 +176,14 @@ bool DownloadResourceHandler::OnResponseCompleted( << " request_id = " << request_id << " status.status() = " << status.status() << " status.os_error() = " << status.os_error(); + // Ownership of |buffer_| is passed to DownloadFileManager. BrowserThread::PostTask( BrowserThread::FILE, FROM_HERE, NewRunnableMethod(download_file_manager_, &DownloadFileManager::OnResponseCompleted, download_id_, - buffer_)); + buffer_.release())); read_buffer_ = NULL; - - // 'buffer_' is deleted by the DownloadFileManager. - buffer_ = NULL; return true; } @@ -209,7 +207,7 @@ void DownloadResourceHandler::set_content_disposition( } void DownloadResourceHandler::CheckWriteProgress() { - if (!buffer_) + if (!buffer_.get()) return; // The download completed while we were waiting to run. size_t contents_size; diff --git a/chrome/browser/renderer_host/download_resource_handler.h b/chrome/browser/renderer_host/download_resource_handler.h index e252675..e82a7be 100644 --- a/chrome/browser/renderer_host/download_resource_handler.h +++ b/chrome/browser/renderer_host/download_resource_handler.h @@ -8,6 +8,7 @@ #include <string> +#include "base/scoped_ptr.h" #include "base/timer.h" #include "chrome/browser/download/download_file.h" #include "content/browser/renderer_host/global_request_id.h" @@ -86,7 +87,7 @@ class DownloadResourceHandler : public ResourceHandler { net::URLRequest* request_; bool save_as_; // Request was initiated via "Save As" by the user. DownloadSaveInfo save_info_; - DownloadBuffer* buffer_; + scoped_ptr<DownloadBuffer> buffer_; ResourceDispatcherHost* rdh_; bool is_paused_; base::OneShotTimer<DownloadResourceHandler> pause_timer_; |