[PATCH 44/54] drm/intel: destructor for glyph cache node
"Enrico Weigelt, metux IT consult" <[email protected]>
| Newsgroups | gmane.comp.lib.cairo |
|---|---|
| Message-ID | <[email protected]> |
Signed-off-by: Enrico Weigelt, metux IT consult <[email protected]> --- src/drm/cairo-drm-intel.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/drm/cairo-drm-intel.c b/src/drm/cairo-drm-intel.c index 99be4da..0fa01ab 100644 --- a/src/drm/cairo-drm-intel.c +++ b/src/drm/cairo-drm-intel.c @@ -965,6 +965,24 @@ intel_glyph_cache_add_glyph (intel_device_t *device, return CAIRO_INT_STATUS_SUCCESS; } +static void +_cairo_drm_intel_node_destroy (cairo_rtree_node_t *node) +{ + intel_glyph_t *priv = cairo_container_of (node, intel_glyph_t, node); + cairo_scaled_glyph_t *glyph; + + glyph = priv->glyph; + if (glyph == NULL) + return; + + if (glyph->dev_private_key == priv->cache) { + glyph->dev_private = NULL; + glyph->dev_private_key = NULL; + } + cairo_list_del (&priv->base.link); + priv->glyph = NULL; +} + void intel_scaled_glyph_fini (cairo_scaled_glyph_private_t *scaled_glyph_private, cairo_scaled_glyph_t *scaled_glyph, @@ -974,6 +992,8 @@ intel_scaled_glyph_fini (cairo_scaled_glyph_private_t *scaled_glyph_private, intel_glyph_t, base); + _cairo_drm_intel_node_destroy (&priv->node); + /* XXX thread-safety? Probably ok due to the frozen scaled-font. */ if (! priv->node.pinned) _cairo_rtree_node_remove (&priv->cache->rtree, &priv->node); @@ -1023,7 +1043,8 @@ intel_get_glyph_cache (intel_device_t *device, GLYPH_CACHE_WIDTH, GLYPH_CACHE_HEIGHT, GLYPH_CACHE_MIN_SIZE, - sizeof (intel_glyph_t)); + sizeof (intel_glyph_t), + _cairo_drm_intel_node_destroy); } *out = cache; -- 2.6.4.442.g545299f -- cairo mailing list [email protected] http://lists.cairographics.org/mailman/listinfo/cairo