commit:     63a4598a1ae65384bf49a869b292a90509d96633
Author:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Sat Oct  3 19:09:17 2015 +0000
Commit:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Sat Oct  3 19:09:31 2015 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=63a4598a

net-p2p/transmission: Fix segfault

Bug: https://bugs.gentoo.org/534308

Package-Manager: portage-2.2.22_p5

 .../files/2.84-node_alloc-segfault.patch           | 55 ++++++++++++++++++++++
 ...-2.84-r2.ebuild => transmission-2.84-r3.ebuild} |  1 +
 2 files changed, 56 insertions(+)

diff --git a/net-p2p/transmission/files/2.84-node_alloc-segfault.patch 
b/net-p2p/transmission/files/2.84-node_alloc-segfault.patch
new file mode 100644
index 0000000..7172428
--- /dev/null
+++ b/net-p2p/transmission/files/2.84-node_alloc-segfault.patch
@@ -0,0 +1,55 @@
+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);
+     }
+ }
+ 

diff --git a/net-p2p/transmission/transmission-2.84-r2.ebuild 
b/net-p2p/transmission/transmission-2.84-r3.ebuild
similarity index 98%
rename from net-p2p/transmission/transmission-2.84-r2.ebuild
rename to net-p2p/transmission/transmission-2.84-r3.ebuild
index 09d42ad..d605c80 100644
--- a/net-p2p/transmission/transmission-2.84-r2.ebuild
+++ b/net-p2p/transmission/transmission-2.84-r3.ebuild
@@ -75,6 +75,7 @@ src_prepare() {
 
        epatch "${FILESDIR}/2.84-miniupnp14.patch"
        epatch "${FILESDIR}/2.84-libevent-2.1.5.patch"
+       epatch "${FILESDIR}/2.84-node_alloc-segfault.patch"
 
        epatch_user
        eautoreconf

Reply via email to