summaryrefslogtreecommitdiffstats
path: root/content/browser/trace_subscriber_stdio.cc
diff options
context:
space:
mode:
authorhusky@chromium.org <husky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-19 18:02:03 +0000
committerhusky@chromium.org <husky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-19 18:02:03 +0000
commit0d5c21b8b6b46d6349d22c3c7839016fcb8f6fc4 (patch)
treed86d3b17c6ff49c7a46dfee710ba084345e49b3b /content/browser/trace_subscriber_stdio.cc
parentdf97de1f11639736b8cdcc4301458b56bde955ea (diff)
downloadchromium_src-0d5c21b8b6b46d6349d22c3c7839016fcb8f6fc4.zip
chromium_src-0d5c21b8b6b46d6349d22c3c7839016fcb8f6fc4.tar.gz
chromium_src-0d5c21b8b6b46d6349d22c3c7839016fcb8f6fc4.tar.bz2
Fix memory leak in TraceSubscriberStdioImpl.
This class uses TraceBuffer internally, via a callback object. The callback references the TraceSubscriberStdioImpl so there was a reference cycle. Fixed by explicitly clearing the callback. BUG=115411 TEST=TraceSubscriberStdioTest under Valgrind Review URL: https://chromiumcodereview.appspot.com/10797012 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@147482 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/trace_subscriber_stdio.cc')
-rw-r--r--content/browser/trace_subscriber_stdio.cc9
1 files changed, 6 insertions, 3 deletions
diff --git a/content/browser/trace_subscriber_stdio.cc b/content/browser/trace_subscriber_stdio.cc
index e390212..a102810 100644
--- a/content/browser/trace_subscriber_stdio.cc
+++ b/content/browser/trace_subscriber_stdio.cc
@@ -58,6 +58,9 @@ class TraceSubscriberStdioImpl
fclose(file_);
file_ = 0;
}
+ // This is important, as it breaks a reference cycle.
+ trace_buffer_.SetOutputCallback(
+ base::debug::TraceResultBuffer::OutputCallback());
}
void Write(const std::string& output_str) {
@@ -79,7 +82,7 @@ TraceSubscriberStdio::TraceSubscriberStdio(const FilePath& path)
: impl_(new TraceSubscriberStdioImpl(path)) {
BrowserThread::PostBlockingPoolSequencedTask(
__FILE__, FROM_HERE,
- base::Bind(&TraceSubscriberStdioImpl::OnStart, impl_.get()));
+ base::Bind(&TraceSubscriberStdioImpl::OnStart, impl_));
}
TraceSubscriberStdio::~TraceSubscriberStdio() {
@@ -88,14 +91,14 @@ TraceSubscriberStdio::~TraceSubscriberStdio() {
void TraceSubscriberStdio::OnEndTracingComplete() {
BrowserThread::PostBlockingPoolSequencedTask(
__FILE__, FROM_HERE,
- base::Bind(&TraceSubscriberStdioImpl::OnEnd, impl_.get()));
+ base::Bind(&TraceSubscriberStdioImpl::OnEnd, impl_));
}
void TraceSubscriberStdio::OnTraceDataCollected(
const scoped_refptr<base::RefCountedString>& data_ptr) {
BrowserThread::PostBlockingPoolSequencedTask(
__FILE__, FROM_HERE,
- base::Bind(&TraceSubscriberStdioImpl::OnData, impl_.get(), data_ptr));
+ base::Bind(&TraceSubscriberStdioImpl::OnData, impl_, data_ptr));
}
} // namespace content