mirror of
https://github.com/transmission/transmission
synced 2024-12-24 08:43:27 +00:00
(trunk, libT) #5735 'segfault iside node_alloc' -- fixed with patch by benjarobin
This commit is contained in:
parent
74e16f78bd
commit
d7f4478679
1 changed files with 16 additions and 10 deletions
|
@ -30,18 +30,22 @@ getRecycledNodesLock (void)
|
|||
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;
|
||||
|
@ -51,13 +55,15 @@ node_alloc (void)
|
|||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue