Commit c435080b authored by gab's avatar gab Committed by Commit bot

Fix TSAN race in access to StatisticsRecorder::lock_

BUG=672852
TEST=No more content_unittests, events_unittests, and extensions_unittests failures on linux_chromium_tsan_rel_ng
Confirmed @ https://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_tsan_rel_ng/builds/377

Review-Url: https://codereview.chromium.org/2565893002
Cr-Commit-Position: refs/heads/master@{#437932}
parent a6ba8d8c
This diff is collapsed.
......@@ -25,11 +25,11 @@
#include "base/macros.h"
#include "base/metrics/histogram_base.h"
#include "base/strings/string_piece.h"
#include "base/synchronization/lock.h"
namespace base {
class BucketRanges;
class Lock;
class BASE_EXPORT StatisticsRecorder {
public:
......@@ -230,8 +230,11 @@ class BASE_EXPORT StatisticsRecorder {
static CallbackMap* callbacks_;
static RangesMap* ranges_;
// Lock protects access to above maps.
static base::Lock* lock_;
// Lock protects access to above maps. This is a LazyInstance to avoid races
// when the above methods are used before Initialize(). Previously each method
// would do |if (!lock_) return;| which would race with
// |lock_ = new Lock;| in StatisticsRecorder(). http://crbug.com/672852.
static base::LazyInstance<base::Lock>::Leaky lock_;
DISALLOW_COPY_AND_ASSIGN(StatisticsRecorder);
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment