Index: chrome/browser/ui/webui/chrome_url_data_manager.cc |
diff --git a/chrome/browser/ui/webui/chrome_url_data_manager.cc b/chrome/browser/ui/webui/chrome_url_data_manager.cc |
index 43ede09d0d6543b05d41e0ca53e80e83383045cc..967f1a5df948f9394e960e3fe7d832273da060ff 100644 |
--- a/chrome/browser/ui/webui/chrome_url_data_manager.cc |
+++ b/chrome/browser/ui/webui/chrome_url_data_manager.cc |
@@ -119,6 +119,8 @@ ChromeURLDataManager::DataSource::~DataSource() { |
void ChromeURLDataManager::DataSource::SendResponse(int request_id, |
RefCountedMemory* bytes) { |
+ // Take a ref-pointer on entry so byte->Release() will always get called. |
+ scoped_refptr<RefCountedMemory> bytes_ptr(bytes); |
if (IsScheduledForDeletion(this)) { |
// We're scheduled for deletion. Servicing the request would result in |
// this->AddRef being invoked, even though the ref count is 0 and 'this' is |
@@ -136,7 +138,7 @@ void ChromeURLDataManager::DataSource::SendResponse(int request_id, |
BrowserThread::PostTask( |
BrowserThread::IO, FROM_HERE, |
NewRunnableMethod(this, &DataSource::SendResponseOnIOThread, |
- request_id, make_scoped_refptr(bytes))); |
+ request_id, bytes_ptr)); |
} |
MessageLoop* ChromeURLDataManager::DataSource::MessageLoopForRequestPath( |