From 3a01d2e619e68cad445c595b666425454a47ccad Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Mon, 29 Dec 2008 17:28:14 +0000 Subject: [PATCH] (trunk libT) recycle the tr_list nodes when possible --- libtransmission/list.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/libtransmission/list.c b/libtransmission/list.c index c6de04f1b..ebbd99041 100644 --- a/libtransmission/list.c +++ b/libtransmission/list.c @@ -14,16 +14,39 @@ #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; + } } /***