summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@behdad.org>2009-12-25 15:30:57 +0100
committerBehdad Esfahbod <behdad@behdad.org>2009-12-25 19:22:18 +0100
commit0dbcc691b8e14879a72d275d188848064d8c7e40 (patch)
tree57cd048a92cfc5e7a413b218ba6c4f498a8c7d72
parentce6ee34f226b5f7582ea944fe8123bb0a04269d0 (diff)
downloadpango-0dbcc691b8e14879a72d275d188848064d8c7e40.tar.gz
[modules] Don't warn multiple times
-rw-r--r--pango/modules.c44
1 files changed, 32 insertions, 12 deletions
diff --git a/pango/modules.c b/pango/modules.c
index e6c13349..dad8aae7 100644
--- a/pango/modules.c
+++ b/pango/modules.c
@@ -100,6 +100,22 @@ static void init_modules (void);
static GType pango_module_get_type (void);
+/* If a module cannot be used, or does not create an engine
+ * correctly, we print out an error containing module name and id,
+ * but to not flood the terminal with zillions of the message, we
+ * set a flag on the module to only err once per module.
+ */
+static GQuark
+get_warned_quark (void)
+{
+ static GQuark warned_quark = 0;
+
+ if (G_UNLIKELY (!warned_quark))
+ warned_quark = g_quark_from_static_string ("pango-module-warned");
+
+ return warned_quark;
+}
+
/**
* pango_find_map:
* @language: the language tag for which to find the map
@@ -172,7 +188,13 @@ pango_module_load (GTypeModule *module)
pango_module->library = g_module_open (pango_module->path, G_MODULE_BIND_LOCAL);
if (!pango_module->library)
{
- g_warning ("%s", g_module_error());
+ GQuark warned_quark = get_warned_quark ();
+ if (!g_object_get_qdata (G_OBJECT (pango_module), warned_quark))
+ {
+ g_warning ("%s", g_module_error());
+ g_object_set_qdata_full (G_OBJECT (pango_module), warned_quark,
+ GINT_TO_POINTER (1), NULL);
+ }
return FALSE;
}
@@ -186,7 +208,14 @@ pango_module_load (GTypeModule *module)
!g_module_symbol (pango_module->library, "script_engine_create",
(gpointer *)(void *)&pango_module->create))
{
- g_warning ("%s", g_module_error());
+ GQuark warned_quark = get_warned_quark ();
+ if (!g_object_get_qdata (G_OBJECT (pango_module), warned_quark))
+ {
+ g_warning ("%s", g_module_error());
+ g_object_set_qdata_full (G_OBJECT (pango_module), warned_quark,
+ GINT_TO_POINTER (1), NULL);
+ }
+
g_module_close (pango_module->library);
return FALSE;
@@ -263,16 +292,7 @@ pango_engine_pair_get_engine (PangoEnginePair *pair)
if (!pair->engine)
{
- /* If a module cannot be used, or doesn't not create an engine
- * correctly, we print out an error containing module name and id,
- * but to not flood the terminal with zillions of the message, we
- * set a flag on the module to only err once per module.
- */
- static GQuark warned_quark = 0;
-
- if (!warned_quark)
- warned_quark = g_quark_from_static_string ("pango-module-warned");
-
+ GQuark warned_quark = get_warned_quark ();
if (!g_object_get_qdata (G_OBJECT (pair->module), warned_quark))
{
g_warning ("Failed to load Pango module '%s' for id '%s'", pair->module->path, pair->info.id);