mirror of
https://gitlab.freedesktop.org/freetype/freetype.git
synced 2026-05-07 04:08:47 +02:00
Merge branch 'ftc_unref' into 'master'
[cache] Protect referenced nodes. Closes #1401 See merge request freetype/freetype!419
This commit is contained in:
commit
41e58cef83
2 changed files with 23 additions and 7 deletions
10
src/cache/ftccache.c
vendored
10
src/cache/ftccache.c
vendored
|
|
@ -568,9 +568,13 @@
|
|||
manager->cur_weight -= cache->clazz.node_weight( node, cache );
|
||||
ftc_node_mru_unlink( node, manager );
|
||||
|
||||
cache->clazz.node_free( node, cache );
|
||||
|
||||
cache->slack++;
|
||||
if ( node->ref_count <= 0 )
|
||||
{
|
||||
cache->clazz.node_free( node, cache );
|
||||
cache->slack++;
|
||||
}
|
||||
else
|
||||
node->link = node; /* mark unlinked */
|
||||
}
|
||||
else
|
||||
pnode = &node->link;
|
||||
|
|
|
|||
20
src/cache/ftcmanag.c
vendored
20
src/cache/ftcmanag.c
vendored
|
|
@ -667,10 +667,22 @@
|
|||
FTC_Node_Unref( FTC_Node node,
|
||||
FTC_Manager manager )
|
||||
{
|
||||
if ( node &&
|
||||
manager &&
|
||||
node->cache_index < manager->num_caches )
|
||||
node->ref_count--;
|
||||
if ( !node || !manager ||
|
||||
node->cache_index >= manager->num_caches )
|
||||
return;
|
||||
|
||||
node->ref_count--;
|
||||
|
||||
/* free unlinked node */
|
||||
if ( node->ref_count <= 0 && node->link == node )
|
||||
{
|
||||
FTC_Cache cache = manager->caches[node->cache_index];
|
||||
|
||||
|
||||
cache->clazz.node_free( node, cache );
|
||||
cache->slack++;
|
||||
ftc_cache_resize( cache );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue