dev-libs/libevent: Add patch to fix Zombie leftovers
authorTobias Klausmann <klausman@gentoo.org>
Thu, 15 Oct 2015 07:38:47 +0000 (09:38 +0200)
committerTobias Klausmann <klausman@gentoo.org>
Thu, 15 Oct 2015 07:38:47 +0000 (09:38 +0200)
When-if upstream makes a release that contains this patch, we can drop it. But
since it has been six months without a release, let'suse it directly ourselves.

Gentoo-Bug: 540456
Libevent-Bug: http://sourceforge.net/p/levent/bugs/350/

Package-Manager: portage-2.2.23

dev-libs/libevent/files/event_signals_ordering.patch [new file with mode: 0644]
dev-libs/libevent/libevent-2.1.5-r4.ebuild [new file with mode: 0644]

diff --git a/dev-libs/libevent/files/event_signals_ordering.patch b/dev-libs/libevent/files/event_signals_ordering.patch
new file mode 100644 (file)
index 0000000..d0cb2b3
--- /dev/null
@@ -0,0 +1,36 @@
+diff --git a/event.c b/event.c
+index acef2b2..ad4c7f0 100644
+--- a/event.c
++++ b/event.c
+@@ -926,13 +926,13 @@ event_reinit(struct event_base *base)
+               event_del_nolock_(&base->sig.ev_signal, EVENT_DEL_AUTOBLOCK);
+               event_debug_unassign(&base->sig.ev_signal);
+               memset(&base->sig.ev_signal, 0, sizeof(base->sig.ev_signal));
+-              if (base->sig.ev_signal_pair[0] != -1)
+-                      EVUTIL_CLOSESOCKET(base->sig.ev_signal_pair[0]);
+-              if (base->sig.ev_signal_pair[1] != -1)
+-                      EVUTIL_CLOSESOCKET(base->sig.ev_signal_pair[1]);
+               had_signal_added = 1;
+               base->sig.ev_signal_added = 0;
+       }
++    if (base->sig.ev_signal_pair[0] != -1)
++        EVUTIL_CLOSESOCKET(base->sig.ev_signal_pair[0]);
++    if (base->sig.ev_signal_pair[1] != -1)
++        EVUTIL_CLOSESOCKET(base->sig.ev_signal_pair[1]);
+       if (base->th_notify_fn != NULL) {
+               was_notifiable = 1;
+               base->th_notify_fn = NULL;
+@@ -981,8 +981,12 @@ event_reinit(struct event_base *base)
+               if (evmap_reinit_(base) < 0)
+                       res = -1;
+       } else {
+-              if (had_signal_added)
+                       res = evsig_init_(base);
++                      if (res == 0 && had_signal_added) {
++                              res = event_add_nolock_(&base->sig.ev_signal, NULL, 0);
++                              if (res == 0)
++                                      base->sig.ev_signal_added = 1;
++                      }
+       }
+ 
+       /* If we were notifiable before, and nothing just exploded, become
diff --git a/dev-libs/libevent/libevent-2.1.5-r4.ebuild b/dev-libs/libevent/libevent-2.1.5-r4.ebuild
new file mode 100644 (file)
index 0000000..e55213f
--- /dev/null
@@ -0,0 +1,70 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+inherit eutils libtool multilib-minimal
+
+MY_P="${P}-beta"
+
+DESCRIPTION="A library to execute a function when a specific event occurs on a file descriptor"
+HOMEPAGE="http://libevent.org/"
+SRC_URI="mirror://sourceforge/levent/files/${MY_P}.tar.gz"
+
+LICENSE="BSD"
+# libevent-2.1.so.5
+SLOT="0/2.1-5"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd ~x64-freebsd ~x86-freebsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~x64-solaris ~x86-solaris"
+IUSE="debug libressl +ssl static-libs test +threads"
+
+DEPEND="
+       ssl? (
+               !libressl? ( >=dev-libs/openssl-1.0.1h-r2:0[${MULTILIB_USEDEP}] )
+               libressl? ( dev-libs/libressl[${MULTILIB_USEDEP}] )
+       )
+"
+RDEPEND="
+       ${DEPEND}
+       !<=dev-libs/9libs-1.0
+"
+
+MULTILIB_WRAPPED_HEADERS=(
+       /usr/include/event2/event-config.h
+)
+
+S=${WORKDIR}/${MY_P}
+
+src_prepare() {
+       elibtoolize
+       epatch "${FILESDIR}/event_signals_ordering.patch"
+       # don't waste time building tests
+       # https://github.com/libevent/libevent/pull/144
+       sed -i -e '/^all:/s|tests||g' Makefile.nmake || die
+}
+
+multilib_src_configure() {
+       # fix out-of-source builds
+       mkdir -p test || die
+
+       ECONF_SOURCE="${S}" \
+       econf \
+               $(use_enable debug debug-mode) \
+               $(use_enable debug malloc-replacement) \
+               $(use_enable ssl openssl) \
+               $(use_enable static-libs static) \
+               $(use_enable threads thread-support)
+}
+
+src_test() {
+       # The test suite doesn't quite work (see bug #406801 for the latest
+       # installment in a riveting series of reports).
+       :
+       # emake -C test check | tee "${T}"/tests
+}
+
+DOCS=( ChangeLog{,-1.4,-2.0} )
+
+multilib_src_install_all() {
+       einstalldocs
+       prune_libtool_files
+}