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 @@ ...@@ -25,11 +25,11 @@
#include "base/macros.h" #include "base/macros.h"
#include "base/metrics/histogram_base.h" #include "base/metrics/histogram_base.h"
#include "base/strings/string_piece.h" #include "base/strings/string_piece.h"
#include "base/synchronization/lock.h"
namespace base { namespace base {
class BucketRanges; class BucketRanges;
class Lock;
class BASE_EXPORT StatisticsRecorder { class BASE_EXPORT StatisticsRecorder {
public: public:
...@@ -230,8 +230,11 @@ class BASE_EXPORT StatisticsRecorder { ...@@ -230,8 +230,11 @@ class BASE_EXPORT StatisticsRecorder {
static CallbackMap* callbacks_; static CallbackMap* callbacks_;
static RangesMap* ranges_; static RangesMap* ranges_;
// Lock protects access to above maps. // Lock protects access to above maps. This is a LazyInstance to avoid races
static base::Lock* lock_; // 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); 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