]> granicus.if.org Git - transmission/commitdiff
(trunk libT) recycle the tr_list nodes when possible
authorCharles Kerr <charles@transmissionbt.com>
Mon, 29 Dec 2008 17:28:14 +0000 (17:28 +0000)
committerCharles Kerr <charles@transmissionbt.com>
Mon, 29 Dec 2008 17:28:14 +0000 (17:28 +0000)
libtransmission/list.c

index c6de04f1bea52a1a1a530ecde8d7a966f4e87ac5..ebbd99041e27a409ddba2baf7fe0e0f340d5bbfa 100644 (file)
 #include "list.h"
 #include "utils.h"
 
+/***
+****
+***/
+
+static tr_list * _unusedNodes = NULL;
+
+static const tr_list TR_LIST_INIT = { NULL, NULL, NULL };
+
 static tr_list*
 node_alloc( void )
 {
-    return tr_new0( tr_list, 1 );
+    tr_list * node;
+
+    if( _unusedNodes == NULL )
+        node = tr_new( tr_list, 1 );
+    else {
+        node = _unusedNodes;
+        _unusedNodes = node->next;
+    }
+
+    *node = TR_LIST_INIT;
+    return node;
 }
 
 static void
 node_free( tr_list* node )
 {
-    tr_free( node );
+    if( node )
+    {
+        *node = TR_LIST_INIT;
+        node->next = _unusedNodes;
+        _unusedNodes = node;
+    }
 }
 
 /***