diff options
Diffstat (limited to 'pango/pangocairo-context.c')
-rw-r--r-- | pango/pangocairo-context.c | 10 |
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; |