| Index: base/i18n/rtl.cc | 
| diff --git a/base/i18n/rtl.cc b/base/i18n/rtl.cc | 
| index 095d66c6d8af13a9846e70ddc4fdf650410d2d03..28fa0b087c2395461161a9302f84cfd3aa5611d7 100644 | 
| --- a/base/i18n/rtl.cc | 
| +++ b/base/i18n/rtl.cc | 
| @@ -12,12 +12,14 @@ | 
| #include "base/command_line.h" | 
| #include "base/files/file_path.h" | 
| #include "base/i18n/base_i18n_switches.h" | 
| +#include "base/lazy_instance.h" | 
| #include "base/logging.h" | 
| #include "base/macros.h" | 
| #include "base/strings/string_split.h" | 
| #include "base/strings/string_util.h" | 
| #include "base/strings/sys_string_conversions.h" | 
| #include "base/strings/utf_string_conversions.h" | 
| +#include "base/synchronization/lock.h" | 
| #include "build/build_config.h" | 
| #include "third_party/icu/source/common/unicode/locid.h" | 
| #include "third_party/icu/source/common/unicode/uchar.h" | 
| @@ -101,6 +103,8 @@ namespace base { | 
| namespace i18n { | 
|  | 
| // Represents the locale-specific ICU text direction. | 
| +static base::LazyInstance<base::Lock>::Leaky g_icu_text_direction_lock = | 
| +    LAZY_INSTANCE_INITIALIZER; | 
| static TextDirection g_icu_text_direction = UNKNOWN_DIRECTION; | 
|  | 
| // Convert the ICU default locale to a string. | 
| @@ -150,7 +154,10 @@ void SetICUDefaultLocale(const std::string& locale_string) { | 
| // presence of actual locale data). However, | 
| // it does not hurt to have it as a sanity check. | 
| DCHECK(U_SUCCESS(error_code)); | 
| -  g_icu_text_direction = UNKNOWN_DIRECTION; | 
| +  { | 
| +    base::AutoLock lock(g_icu_text_direction_lock.Get()); | 
| +    g_icu_text_direction = UNKNOWN_DIRECTION; | 
| +  } | 
| } | 
|  | 
| bool IsRTL() { | 
| @@ -158,6 +165,7 @@ bool IsRTL() { | 
| } | 
|  | 
| bool ICUIsRTL() { | 
| +  base::AutoLock lock(g_icu_text_direction_lock.Get()); | 
| if (g_icu_text_direction == UNKNOWN_DIRECTION) { | 
| const icu::Locale& locale = icu::Locale::getDefault(); | 
| g_icu_text_direction = GetTextDirectionForLocaleInStartUp(locale.getName()); | 
|  |