summaryrefslogtreecommitdiffstats
path: root/base
diff options
context:
space:
mode:
authorwangxianzhu@chromium.org <wangxianzhu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-01 22:31:11 +0000
committerwangxianzhu@chromium.org <wangxianzhu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-01 22:31:11 +0000
commit11d1bdfa931eebe63e46b769d7508cc5d82fbcec (patch)
tree96621d82ecd925446c56a028c6bc94a894d38cc1 /base
parent94cc4b4cc79ad6ab1cb909ff70087e11fe655385 (diff)
downloadchromium_src-11d1bdfa931eebe63e46b769d7508cc5d82fbcec.zip
chromium_src-11d1bdfa931eebe63e46b769d7508cc5d82fbcec.tar.gz
chromium_src-11d1bdfa931eebe63e46b769d7508cc5d82fbcec.tar.bz2
Fix crash when ECHO_TO_CONSOLE
TraceEvent's copy constructor has a side-effect that the ownership of the convertable values will be passed from the source TraceEvent to the target TraceEvent. Handle ECHO_TO_CONSOLE before the event is added to the buffer. The copy constructor will be obsoleted soon to avoid such issues. BUG=302676 TEST=Run cc_unittests with --trace_to_console Review URL: https://codereview.chromium.org/25453005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@226319 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base')
-rw-r--r--base/debug/trace_event_impl.cc16
1 files changed, 8 insertions, 8 deletions
diff --git a/base/debug/trace_event_impl.cc b/base/debug/trace_event_impl.cc
index fd68350..42c6d84 100644
--- a/base/debug/trace_event_impl.cc
+++ b/base/debug/trace_event_impl.cc
@@ -1551,14 +1551,6 @@ void TraceLog::AddTraceEventWithThreadIdAndTimestamp(
num_args, arg_names, arg_types, arg_values,
convertable_values, flags);
- if (thread_local_event_buffer) {
- thread_local_event_buffer->AddEvent(trace_event, &notifier);
- } else {
- AutoLock lock(lock_);
- AddEventToMainBufferWhileLocked(trace_event);
- CheckIfBufferIsFullWhileLocked(&notifier);
- }
-
if (trace_options() & ECHO_TO_CONSOLE) {
AutoLock lock(lock_);
@@ -1594,6 +1586,14 @@ void TraceLog::AddTraceEventWithThreadIdAndTimestamp(
if (phase == TRACE_EVENT_PHASE_BEGIN)
thread_event_start_times_[thread_id].push(timestamp);
}
+
+ if (thread_local_event_buffer) {
+ thread_local_event_buffer->AddEvent(trace_event, &notifier);
+ } else {
+ AutoLock lock(lock_);
+ AddEventToMainBufferWhileLocked(trace_event);
+ CheckIfBufferIsFullWhileLocked(&notifier);
+ }
}
if (reinterpret_cast<const unsigned char*>(subtle::NoBarrier_Load(