From 11d1bdfa931eebe63e46b769d7508cc5d82fbcec Mon Sep 17 00:00:00 2001 From: "wangxianzhu@chromium.org" Date: Tue, 1 Oct 2013 22:31:11 +0000 Subject: 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 --- base/debug/trace_event_impl.cc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'base') 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, ¬ifier); - } else { - AutoLock lock(lock_); - AddEventToMainBufferWhileLocked(trace_event); - CheckIfBufferIsFullWhileLocked(¬ifier); - } - 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, ¬ifier); + } else { + AutoLock lock(lock_); + AddEventToMainBufferWhileLocked(trace_event); + CheckIfBufferIsFullWhileLocked(¬ifier); + } } if (reinterpret_cast(subtle::NoBarrier_Load( -- cgit v1.1