freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2] master f8f0d1a1d 1/2: * src/cache/ftcmru.c (FTC_MruList_New)


From: Werner Lemberg
Subject: [freetype2] master f8f0d1a1d 1/2: * src/cache/ftcmru.c (FTC_MruList_New): Do not reset nodes.
Date: Mon, 29 Apr 2024 18:06:21 -0400 (EDT)

branch: master
commit f8f0d1a1d919bbaec89dbc44e7704cdf8ebd6662
Author: Alexei Podtelezhnikov <apodtele@gmail.com>
Commit: Alexei Podtelezhnikov <apodtele@gmail.com>

    * src/cache/ftcmru.c (FTC_MruList_New): Do not reset nodes.
    
    Resetting of the size nodes can crash, if a parent face purge happens
    simultaneously and destroys the node. It is safer to create a new node.
    Fixes #1270, reopened with a separate issue.
---
 src/cache/ftcmru.c | 23 ++---------------------
 1 file changed, 2 insertions(+), 21 deletions(-)

diff --git a/src/cache/ftcmru.c b/src/cache/ftcmru.c
index a767fa408..f908eb25a 100644
--- a/src/cache/ftcmru.c
+++ b/src/cache/ftcmru.c
@@ -242,27 +242,6 @@
     FT_Memory    memory = list->memory;
 
 
-    if ( list->max_nodes > 0 && list->num_nodes >= list->max_nodes )
-    {
-      prev = list->nodes->prev;
-
-      FT_ASSERT( prev );
-
-      /* try fast reset when available */
-      if ( list->clazz.node_reset )
-      {
-        error = list->clazz.node_reset( prev, key, list->data );
-        if ( !error )
-        {
-          node = prev;
-
-          FTC_MruNode_Up( &list->nodes, node );
-        }
-
-        goto Exit;
-      }
-    }
-
     /* zero new node in case of node_init failure */
     if ( FT_ALLOC( node, list->clazz.node_size ) )
       goto Exit;
@@ -275,6 +254,8 @@
 
       goto Clean;
     }
+    else if ( list->max_nodes > 0 && list->num_nodes >= list->max_nodes )
+      prev = list->nodes->prev;
 
     FTC_MruNode_Prepend( &list->nodes, node );
     list->num_nodes++;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]