| Index: base/metrics/statistics_recorder.h
|
| diff --git a/base/metrics/statistics_recorder.h b/base/metrics/statistics_recorder.h
|
| index b4dae8770996682e8d1cd7adb78806273c69ddf3..6deddae0109008c10afcff20a58bea52b1625ee7 100644
|
| --- a/base/metrics/statistics_recorder.h
|
| +++ b/base/metrics/statistics_recorder.h
|
| @@ -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);
|
| };
|
|
|