summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-22 23:50:40 +0000
committerjhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-22 23:50:40 +0000
commit8ed01e32a8e827bf19c3f3ff4c82963a5aba85e1 (patch)
treec7e3e43357d42746a868045e82af2d989e64fe3d
parent3f668cbc83792f192cfb262bd7a720152ae0f450 (diff)
downloadchromium_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.cc10
-rw-r--r--chrome/browser/renderer_host/download_resource_handler.h3
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_;