diff options
author | wangxianzhu@chromium.org <wangxianzhu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-01 22:31:11 +0000 |
---|---|---|
committer | wangxianzhu@chromium.org <wangxianzhu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-01 22:31:11 +0000 |
commit | 11d1bdfa931eebe63e46b769d7508cc5d82fbcec (patch) | |
tree | 96621d82ecd925446c56a028c6bc94a894d38cc1 /base | |
parent | 94cc4b4cc79ad6ab1cb909ff70087e11fe655385 (diff) | |
download | chromium_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.cc | 16 |
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, ¬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<const unsigned char*>(subtle::NoBarrier_Load( |