| Index: libtransmission/list.c |
| =================================================================== |
| --- libtransmission/list.c (revision 14318) |
| +++ libtransmission/list.c (revision 14319) |
| @@ -30,20 +30,24 @@ |
| static tr_list* |
| node_alloc (void) |
| { |
| - tr_list * ret; |
| + tr_list * ret = NULL; |
| + tr_lock * lock = getRecycledNodesLock (); |
| |
| - if (recycled_nodes == NULL) |
| + tr_lockLock (lock); |
| + |
| + if (recycled_nodes != NULL) |
| { |
| - ret = tr_new (tr_list, 1); |
| - } |
| - else |
| - { |
| - tr_lockLock (getRecycledNodesLock ()); |
| ret = recycled_nodes; |
| recycled_nodes = recycled_nodes->next; |
| - tr_lockUnlock (getRecycledNodesLock ()); |
| } |
| |
| + tr_lockUnlock (lock); |
| + |
| + if (ret == NULL) |
| + { |
| + ret = tr_new (tr_list, 1); |
| + } |
| + |
| *ret = TR_LIST_CLEAR; |
| return ret; |
| } |
| @@ -51,13 +55,15 @@ |
| static void |
| 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); |
| } |
| } |
| |