| Index: base/trace_event/trace_log.cc
|
| diff --git a/base/trace_event/trace_log.cc b/base/trace_event/trace_log.cc
|
| index 1a9af140551254bf6111c54ed4fb2a55d2e50121..8b8ef76c6f8b502618fb184f78898dc7602dc2df 100644
|
| --- a/base/trace_event/trace_log.cc
|
| +++ b/base/trace_event/trace_log.cc
|
| @@ -818,7 +818,8 @@ TraceConfig TraceLog::GetCurrentTraceConfig() const {
|
| }
|
|
|
| void TraceLog::SetDisabled() {
|
| - AutoLock lock(lock_);
|
| + AutoLock lock1(disabling_lock_);
|
| + AutoLock lock2(lock_);
|
| SetDisabledWhileLocked();
|
| }
|
|
|
| @@ -834,6 +835,18 @@ void TraceLog::SetDisabledWhileLocked() {
|
| return;
|
| }
|
|
|
| + std::vector<EnabledStateObserver*> observer_list =
|
| + enabled_state_observer_list_;
|
| + dispatching_to_observer_list_ = true;
|
| + {
|
| + // Dispatch to observers outside the lock in case the observer triggers a
|
| + // trace event.
|
| + AutoUnlock unlock(lock_);
|
| + for (EnabledStateObserver* observer : observer_list)
|
| + observer->OnBeforeTraceLogDisabled();
|
| + }
|
| + dispatching_to_observer_list_ = false;
|
| +
|
| mode_ = DISABLED;
|
|
|
| if (sampling_thread_) {
|
| @@ -855,12 +868,9 @@ void TraceLog::SetDisabledWhileLocked() {
|
| // Remove metadata events so they will not get added to a subsequent trace.
|
| metadata_events_.clear();
|
|
|
| - dispatching_to_observer_list_ = true;
|
| - std::vector<EnabledStateObserver*> observer_list =
|
| - enabled_state_observer_list_;
|
| std::map<AsyncEnabledStateObserver*, RegisteredAsyncObserver> observer_map =
|
| async_observers_;
|
| -
|
| + dispatching_to_observer_list_ = true;
|
| {
|
| // Dispatch to observers outside the lock in case the observer triggers a
|
| // trace event.
|
|
|