diff options
Diffstat (limited to 'pango/pangofc-fontmap.c')
-rw-r--r-- | pango/pangofc-fontmap.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/pango/pangofc-fontmap.c b/pango/pangofc-fontmap.c index 84f2b94f..2e031a82 100644 --- a/pango/pangofc-fontmap.c +++ b/pango/pangofc-fontmap.c @@ -689,9 +689,9 @@ pango_fc_patterns_new (FcPattern *pat, PangoFcFontMap *fontmap) PangoFcPatterns *pats; pat = uniquify_pattern (fontmap, pat); - pats = p_hash_table_lookup (fontmap->priv->patterns_hash, pat); + pats = p_hash_table_lookup_ref (fontmap->priv->patterns_hash, pat, pango_fc_patterns_ref); if (pats) - return pango_fc_patterns_ref (pats); + return pats; pats = g_slice_new0 (PangoFcPatterns); @@ -1218,6 +1218,7 @@ pango_fc_font_map_add (PangoFcFontMap *fcfontmap, key_copy = pango_fc_font_key_copy (key); _pango_fc_font_set_font_key (fcfont, key_copy); + /* XXXXXXXXXXX racy here? */ p_hash_table_insert (priv->font_hash, key_copy, fcfont); } @@ -1508,6 +1509,7 @@ uniquify_pattern (PangoFcFontMap *fcfontmap, PangoFcFontMapPrivate *priv = fcfontmap->priv; FcPattern *old_pattern; + /* XXXXXX racy here? */ old_pattern = p_hash_table_lookup (priv->pattern_hash, pattern); if (old_pattern) { @@ -1539,9 +1541,9 @@ pango_fc_font_map_new_font (PangoFcFontMap *fcfontmap, pango_fc_font_key_init (&key, fcfontmap, fontset_key, match); - fcfont = p_hash_table_lookup (priv->font_hash, &key); + fcfont = p_hash_table_lookup_ref (priv->font_hash, &key, g_object_ref); if (fcfont) - return g_object_ref (fcfont); + return fcfont; class = PANGO_FC_FONT_MAP_GET_CLASS (fcfontmap); @@ -1754,7 +1756,7 @@ pango_fc_font_map_load_fontset (PangoFontMap *fontmap, pango_fc_fontset_key_init (&key, fcfontmap, context, desc, language); - fontset = p_hash_table_lookup (priv->fontset_hash, &key); + fontset = p_hash_table_lookup_ref (priv->fontset_hash, &key, g_object_ref); if (G_UNLIKELY (!fontset)) { @@ -1764,7 +1766,7 @@ pango_fc_font_map_load_fontset (PangoFontMap *fontmap, return NULL; fontset = pango_fc_fontset_new (&key, patterns); - p_hash_table_insert (priv->fontset_hash, pango_fc_fontset_get_key (fontset), fontset); + p_hash_table_insert (priv->fontset_hash, pango_fc_fontset_get_key (fontset), g_object_ref (fontset)); pango_fc_patterns_unref (patterns); } @@ -1773,7 +1775,7 @@ pango_fc_font_map_load_fontset (PangoFontMap *fontmap, pango_font_description_free (key.desc); - return g_object_ref (fontset); + return fontset; } /** @@ -1812,6 +1814,7 @@ pango_fc_font_map_get_font_face_data (PangoFcFontMap *fcfontmap, if (FcPatternGetInteger (font_pattern, FC_INDEX, 0, &key.id) != FcResultMatch) return NULL; + /* XXXXXXXXXX racy here */ data = p_hash_table_lookup (priv->font_face_data_hash, &key); if (G_LIKELY (data)) return data; |