make sure g_set_prgname() gets called only once
authorSven Herzberg <herzi@gnome-de.org>
Fri, 23 Oct 2009 12:49:38 +0000 (14:49 +0200)
committerSven Herzberg <herzi@gnome-de.org>
Fri, 23 Oct 2009 14:23:46 +0000 (16:23 +0200)
* glib/gutils.c: copy the call-once statement from g_set_application_name();
  Fixes Bug #563627: g_get_prgname() threadsafety

glib/gutils.c

index 8b7bfe8a693f00e995465502aca9159ec46cc2c2..b5e9c193a043cacfdc1859be6c74b0dfb45d9e7e 100644 (file)
@@ -1968,10 +1968,17 @@ g_get_prgname (void)
 void
 g_set_prgname (const gchar *prgname)
 {
+  gboolean already_set = FALSE;
+
   G_LOCK (g_prgname);
-  g_free (g_prgname);
-  g_prgname = g_strdup (prgname);
+  if (g_prgname)
+    already_set = TRUE;
+  else
+    g_prgname = g_strdup (prgname);
   G_UNLOCK (g_prgname);
+
+  if (already_set)
+    g_warning ("g_set_prgname() called multiple times");
 }
 
 G_LOCK_DEFINE_STATIC (g_application_name);
@@ -2038,7 +2045,7 @@ g_set_application_name (const gchar *application_name)
   G_UNLOCK (g_application_name);
 
   if (already_set)
-    g_warning ("g_set_application() name called multiple times");
+    g_warning ("g_set_application_name() called multiple times");
 }
 
 /**