Make default_language threadsafe
diff --git a/src/hb-common.cc b/src/hb-common.cc
index baf5977..1301ab2 100644
--- a/src/hb-common.cc
+++ b/src/hb-common.cc
@@ -238,17 +238,12 @@
 hb_language_t
 hb_language_get_default (void)
 {
-  static hb_language_t default_language;
+  static hb_language_t default_language = HB_LANGUAGE_INVALID;
 
-  if (!default_language) {
-    /* This block is not quite threadsafe, but is not as bad as
-     * it looks since it's idempotent.  As long as pointer ops
-     * are atomic, we are safe. */
-
-    /* I hear that setlocale() doesn't honor env vars on Windows,
-     * but for now we ignore that. */
-
-    default_language = hb_language_from_string (setlocale (LC_CTYPE, NULL), -1);
+  hb_language_t language = (hb_language_t) hb_atomic_ptr_get (&default_language);
+  if (unlikely (language == HB_LANGUAGE_INVALID)) {
+    language = hb_language_from_string (setlocale (LC_CTYPE, NULL), -1);
+    hb_atomic_ptr_cmpexch (&default_language, HB_LANGUAGE_INVALID, language);
   }
 
   return default_language;