--- /dev/null
+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);
+ }
+ }
+