Date: Saturday, November 7, 2015 @ 14:03:15 Author: alucryd Revision: 146376
archrelease: copy trunk to multilib-testing-x86_64 Added: lib32-libtirpc/repos/multilib-testing-x86_64/ lib32-libtirpc/repos/multilib-testing-x86_64/PKGBUILD (from rev 146375, lib32-libtirpc/trunk/PKGBUILD) lib32-libtirpc/repos/multilib-testing-x86_64/add_missing_rwlock_unlocks_in_xprt_register.diff (from rev 146375, lib32-libtirpc/trunk/add_missing_rwlock_unlocks_in_xprt_register.diff) --------------------------------------------------+ PKGBUILD | 53 ++++++++++++++++++ add_missing_rwlock_unlocks_in_xprt_register.diff | 61 +++++++++++++++++++++ 2 files changed, 114 insertions(+) Copied: lib32-libtirpc/repos/multilib-testing-x86_64/PKGBUILD (from rev 146375, lib32-libtirpc/trunk/PKGBUILD) =================================================================== --- multilib-testing-x86_64/PKGBUILD (rev 0) +++ multilib-testing-x86_64/PKGBUILD 2015-11-07 13:03:15 UTC (rev 146376) @@ -0,0 +1,53 @@ +# $Id$ +# Maintainer: Maxime Gauduin <aluc...@archlinux.org> +# Contributor: jtts <juss...@mbnet.fi> +# Contributor: Tom Gundersen <t...@jklm.no> +# Contributor: Tobias Powalowski <tp...@archlinux.org> +# Contributor: Franco Tortoriello <franco.tortorie...@gmail.com> +# Contributor: josephgbr <rafael.f...@gmail.com> + +pkgname=lib32-libtirpc +pkgver=1.0.1 +pkgrel=1 +pkgdesc='Transport Independent RPC library (SunRPC replacement)' +arch=('x86_64') +url='http://libtirpc.sourceforge.net/' +license=('BSD') +depends=('lib32-krb5' 'libtirpc') +makedepends=('gcc-multilib') +source=("http://downloads.sourceforge.net/sourceforge/libtirpc/libtirpc-${pkgver}.tar.bz2" + 'add_missing_rwlock_unlocks_in_xprt_register.diff') +sha256sums=('5156974f31be7ccbc8ab1de37c4739af6d9d42c87b1d5caf4835dda75fcbb89e' + '8bcdbd700ec6f8b5f87881251f9851174df233975d95a8dfdf7359f057fb3b80') + +prepare() { + cd libtirpc-${pkgver} + + patch -Np1 -i ../add_missing_rwlock_unlocks_in_xprt_register.diff +} + +build() { + cd libtirpc-${pkgver} + + export CC='gcc -m32' + export CXX='g++ -m32' + export PKG_CONFIG_PATH='/usr/lib32/pkgconfig' + + ./configure \ + --prefix='/usr' \ + --libdir='/usr/lib32' \ + --sysconfdir='/etc' + make +} + +package() { + cd libtirpc-${pkgver} + + make DESTDIR="${pkgdir}" install + rm -rf "${pkgdir}"/{etc,usr/{include,share}} + + install -dm 755 "${pkgdir}"/usr/share/licenses + ln -s libtirpc "${pkgdir}"/usr/share/licenses/${pkgname} +} + +# vim: ts=2 sw=2 et: Copied: lib32-libtirpc/repos/multilib-testing-x86_64/add_missing_rwlock_unlocks_in_xprt_register.diff (from rev 146375, lib32-libtirpc/trunk/add_missing_rwlock_unlocks_in_xprt_register.diff) =================================================================== --- multilib-testing-x86_64/add_missing_rwlock_unlocks_in_xprt_register.diff (rev 0) +++ multilib-testing-x86_64/add_missing_rwlock_unlocks_in_xprt_register.diff 2015-11-07 13:03:15 UTC (rev 146376) @@ -0,0 +1,61 @@ +From 4f1503e84b2f7bd229a097335e52fb8203f5bb0b Mon Sep 17 00:00:00 2001 +From: Michael Forney <mfor...@mforney.org> +Date: Wed, 4 Nov 2015 13:58:06 -0500 +Subject: [PATCH] Add missing rwlock_unlocks in xprt_register + +It looks like in b2c9430f46c4ac848957fb8adaac176a3f6ac03f when svc_run +switched to poll, an early return was added, but the rwlock was not +unlocked. + +I observed that rpcbind built against libtirpc-1.0.1 would handle only +one request before hanging, and tracked it down to a missing +rwlock_unlock here. + +Fixes: b2c9430f46c4 ('Use poll() instead of select() in svc_run()') +Signed-off-by: Michael Forney <mfor...@mforney.org> +Signed-off-by: Steve Dickson <ste...@redhat.com> +--- + src/svc.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/src/svc.c b/src/svc.c +index 9c41445..b59467b 100644 +--- a/src/svc.c ++++ b/src/svc.c +@@ -99,7 +99,7 @@ xprt_register (xprt) + { + __svc_xports = (SVCXPRT **) calloc (_rpc_dtablesize(), sizeof (SVCXPRT *)); + if (__svc_xports == NULL) +- return; ++ goto unlock; + } + if (sock < _rpc_dtablesize()) + { +@@ -120,14 +120,14 @@ xprt_register (xprt) + svc_pollfd[i].fd = sock; + svc_pollfd[i].events = (POLLIN | POLLPRI | + POLLRDNORM | POLLRDBAND); +- return; ++ goto unlock; + } + + new_svc_pollfd = (struct pollfd *) realloc (svc_pollfd, + sizeof (struct pollfd) + * (svc_max_pollfd + 1)); + if (new_svc_pollfd == NULL) /* Out of memory */ +- return; ++ goto unlock; + svc_pollfd = new_svc_pollfd; + ++svc_max_pollfd; + +@@ -135,6 +135,7 @@ xprt_register (xprt) + svc_pollfd[svc_max_pollfd - 1].events = (POLLIN | POLLPRI | + POLLRDNORM | POLLRDBAND); + } ++unlock: + rwlock_unlock (&svc_fd_lock); + } + +-- +1.8.2.1 +