summaryrefslogtreecommitdiff
path: root/pango/pangocairo-context.c
diff options
context:
space:
mode:
Diffstat (limited to 'pango/pangocairo-context.c')
-rw-r--r--pango/pangocairo-context.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/pango/pangocairo-context.c b/pango/pangocairo-context.c
index 54cef064..65223b66 100644
--- a/pango/pangocairo-context.c
+++ b/pango/pangocairo-context.c
@@ -68,6 +68,7 @@ get_context_info (PangoContext *context,
if (G_UNLIKELY (!context_info_quark))
context_info_quark = g_quark_from_static_string ("pango-cairo-context-info");
+retry:
info = g_object_get_qdata (G_OBJECT (context), context_info_quark);
if (G_UNLIKELY (!info) && create)
@@ -75,8 +76,13 @@ get_context_info (PangoContext *context,
info = g_slice_new0 (PangoCairoContextInfo);
info->dpi = -1.0;
- g_object_set_qdata_full (G_OBJECT (context), context_info_quark,
- info, (GDestroyNotify)free_context_info);
+ if (!g_object_replace_qdata (G_OBJECT (context), context_info_quark, NULL,
+ info, (GDestroyNotify)free_context_info,
+ NULL))
+ {
+ free_context_info (info);
+ goto retry;
+ }
}
return info;