Index: /trunk/libtransmission/list.c =================================================================== --- /trunk/libtransmission/list.c (revision 14318) +++ /trunk/libtransmission/list.c (revision 14319) @@ -31,16 +31,20 @@ node_alloc (void) { - tr_list * ret; - - if (recycled_nodes == NULL) - { - ret = tr_new (tr_list, 1); - } - else - { - tr_lockLock (getRecycledNodesLock ()); + tr_list * ret = NULL; + tr_lock * lock = getRecycledNodesLock (); + + tr_lockLock (lock); + + if (recycled_nodes != NULL) + { ret = recycled_nodes; recycled_nodes = recycled_nodes->next; - tr_lockUnlock (getRecycledNodesLock ()); + } + + tr_lockUnlock (lock); + + if (ret == NULL) + { + ret = tr_new (tr_list, 1); } @@ -52,11 +56,13 @@ node_free (tr_list* node) { + tr_lock * lock = getRecycledNodesLock (); + if (node != NULL) { *node = TR_LIST_CLEAR; - tr_lockLock (getRecycledNodesLock ()); + tr_lockLock (lock); node->next = recycled_nodes; recycled_nodes = node; - tr_lockUnlock (getRecycledNodesLock ()); + tr_lockUnlock (lock); } }