Index: base/i18n/rtl.cc |
diff --git a/base/i18n/rtl.cc b/base/i18n/rtl.cc |
index 07fd9642d37d203689c86e2083cf6052f1cf515e..2b6bf37706fd4ad52b28024427fa0451fc121c9d 100644 |
--- a/base/i18n/rtl.cc |
+++ b/base/i18n/rtl.cc |
@@ -9,7 +9,6 @@ |
#include <algorithm> |
-#include "base/atomicops.h" |
#include "base/command_line.h" |
#include "base/files/file_path.h" |
#include "base/i18n/base_i18n_switches.h" |
@@ -114,8 +113,7 @@ |
namespace i18n { |
// Represents the locale-specific ICU text direction. |
-static subtle::Atomic32 g_icu_text_direction = |
- static_cast<subtle::Atomic32>(UNKNOWN_DIRECTION); |
+static TextDirection g_icu_text_direction = UNKNOWN_DIRECTION; |
// Convert the ICU default locale to a string. |
std::string GetConfiguredLocale() { |
@@ -164,10 +162,7 @@ |
// presence of actual locale data). However, |
// it does not hurt to have it as a sanity check. |
DCHECK(U_SUCCESS(error_code)); |
- subtle::Release_Store( |
- &g_icu_text_direction, |
- static_cast<subtle::Atomic32>( |
- GetTextDirectionForLocaleInStartUp(locale.getName()))); |
+ g_icu_text_direction = UNKNOWN_DIRECTION; |
} |
bool IsRTL() { |
@@ -175,11 +170,11 @@ |
} |
bool ICUIsRTL() { |
- // Note: There is still a race if this is executed between the |
- // icu::Locale::setDefault and the g_icu_text_direction store |
- // that happens in SetICUDefaultLocale. |
- return static_cast<TextDirection>( |
- subtle::Acquire_Load(&g_icu_text_direction)) == RIGHT_TO_LEFT; |
+ if (g_icu_text_direction == UNKNOWN_DIRECTION) { |
+ const icu::Locale& locale = icu::Locale::getDefault(); |
+ g_icu_text_direction = GetTextDirectionForLocaleInStartUp(locale.getName()); |
+ } |
+ return g_icu_text_direction == RIGHT_TO_LEFT; |
} |
TextDirection GetTextDirectionForLocaleInStartUp(const char* locale_name) { |