[pango: 20/31] Fix MT-unsafe initializations



commit ef69cbb18b00d7e454cf881a8f58bdabad04ecef
Author: Behdad Esfahbod <behdad behdad org>
Date:   Sat Apr 4 17:07:07 2015 -0700

    Fix MT-unsafe initializations

 pango/pangocoretext.c    |    4 ++--
 pango/pangofc-font.c     |    4 ++--
 pango/pangoft2-fontmap.c |    2 +-
 pango/pangowin32.c       |    9 +++++----
 4 files changed, 10 insertions(+), 9 deletions(-)
---
diff --git a/pango/pangocoretext.c b/pango/pangocoretext.c
index dc5769b..be1d42e 100644
--- a/pango/pangocoretext.c
+++ b/pango/pangocoretext.c
@@ -172,8 +172,8 @@ pango_core_text_font_find_shaper (PangoFont     *font,
                                   guint32        ch)
 {
   static PangoEngineShape *shaper;
-  if (!shaper)
-    shaper = g_object_new (pango_core_text_shape_engine_get_type(), NULL); /* XXX MT-unsafe */
+  if (g_once_init_enter (&shaper))
+    g_once_init_leave (&shaper, g_object_new (pango_core_text_shape_engine_get_type(), NULL));
   return shaper;
 }
 
diff --git a/pango/pangofc-font.c b/pango/pangofc-font.c
index 79dbbbc..b463e90 100644
--- a/pango/pangofc-font.c
+++ b/pango/pangofc-font.c
@@ -342,8 +342,8 @@ pango_fc_font_find_shaper (PangoFont     *font G_GNUC_UNUSED,
                           guint32        ch)
 {
   static PangoEngineShape *shaper;
-  if (!shaper)
-    shaper = g_object_new (pango_fc_shape_engine_get_type(), NULL); /* XXX MT-unsafe */
+  if (g_once_init_enter (&shaper))
+    g_once_init_leave (&shaper, g_object_new (pango_fc_shape_engine_get_type(), NULL));
   return shaper;
 }
 
diff --git a/pango/pangoft2-fontmap.c b/pango/pangoft2-fontmap.c
index 1904f01..ee27f7f 100644
--- a/pango/pangoft2-fontmap.c
+++ b/pango/pangoft2-fontmap.c
@@ -311,7 +311,7 @@ PangoFontMap *
 pango_ft2_font_map_for_display (void)
 {
   if (g_once_init_enter (&pango_ft2_global_fontmap))
-    g_once_init_leave(&pango_ft2_global_fontmap, PANGO_FT2_FONT_MAP (pango_ft2_font_map_new ()));
+    g_once_init_leave (&pango_ft2_global_fontmap, PANGO_FT2_FONT_MAP (pango_ft2_font_map_new ()));
 
   return PANGO_FONT_MAP (pango_ft2_global_fontmap);
 }
diff --git a/pango/pangowin32.c b/pango/pangowin32.c
index 6e2ba26..b663473 100644
--- a/pango/pangowin32.c
+++ b/pango/pangowin32.c
@@ -156,9 +156,9 @@ _pango_win32_font_init (PangoWin32Font *win32font)
 HDC
 pango_win32_get_dc (void)
 {
-  if (_pango_win32_hdc == NULL) /* TODO: MT-unsafe. Use g_once_init/leave */
+  if (g_once_init_enter (&_pango_win32_hdc))
     {
-      _pango_win32_hdc = CreateDC ("DISPLAY", NULL, NULL, NULL);
+      HDC hdc = CreateDC ("DISPLAY", NULL, NULL, NULL);
       memset (&_pango_win32_os_version_info, 0,
              sizeof (_pango_win32_os_version_info));
       _pango_win32_os_version_info.dwOSVersionInfoSize =
@@ -173,6 +173,7 @@ pango_win32_get_dc (void)
       if (getenv ("PANGO_WIN32_DEBUG") != NULL)
        _pango_win32_debug = TRUE;
 #endif
+      g_once_init_leave (&_pango_win32_hdc, hdc);
     }
 
   return _pango_win32_hdc;
@@ -970,8 +971,8 @@ pango_win32_font_find_shaper (PangoFont     *font,
                              guint32        ch)
 {
   static PangoEngineShape *shaper;
-  if (!shaper)
-    shaper = g_object_new (pango_win32_shape_engine_get_type(), NULL); /* XXX MT-unsafe */
+  if (g_once_init_enter (&shaper))
+    g_once_init_leave (&shaper, g_object_new (pango_win32_shape_engine_get_type(), NULL));
   return shaper;
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]