Date: Saturday, November 7, 2015 @ 14:03:05 Author: alucryd Revision: 146375
upgpkg: lib32-libtirpc 1.0.1-1 Added: lib32-libtirpc/trunk/add_missing_rwlock_unlocks_in_xprt_register.diff Modified: lib32-libtirpc/trunk/PKGBUILD Deleted: lib32-libtirpc/trunk/fix_missing_rpc_get_default_domain.patch --------------------------------------------------+ PKGBUILD | 10 +- add_missing_rwlock_unlocks_in_xprt_register.diff | 61 ++++++++++++++ fix_missing_rpc_get_default_domain.patch | 88 --------------------- 3 files changed, 66 insertions(+), 93 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2015-11-07 12:57:35 UTC (rev 146374) +++ PKGBUILD 2015-11-07 13:03:05 UTC (rev 146375) @@ -7,7 +7,7 @@ # Contributor: josephgbr <[email protected]> pkgname=lib32-libtirpc -pkgver=0.3.2 +pkgver=1.0.1 pkgrel=1 pkgdesc='Transport Independent RPC library (SunRPC replacement)' arch=('x86_64') @@ -16,14 +16,14 @@ depends=('lib32-krb5' 'libtirpc') makedepends=('gcc-multilib') source=("http://downloads.sourceforge.net/sourceforge/libtirpc/libtirpc-${pkgver}.tar.bz2" - 'fix_missing_rpc_get_default_domain.patch') -sha256sums=('2008a379f37f2c5d5a87a568b06707422cc3e4f5da305f7fb71f3f4c6d473ffc' - 'fb731fc2d6617e97ef87c6cc5b4bc95b8153d4e0a85f9a5a4b64d3dc94741c05') + 'add_missing_rwlock_unlocks_in_xprt_register.diff') +sha256sums=('5156974f31be7ccbc8ab1de37c4739af6d9d42c87b1d5caf4835dda75fcbb89e' + '8bcdbd700ec6f8b5f87881251f9851174df233975d95a8dfdf7359f057fb3b80') prepare() { cd libtirpc-${pkgver} - patch -Np1 -i ../fix_missing_rpc_get_default_domain.patch + patch -Np1 -i ../add_missing_rwlock_unlocks_in_xprt_register.diff } build() { Added: add_missing_rwlock_unlocks_in_xprt_register.diff =================================================================== --- add_missing_rwlock_unlocks_in_xprt_register.diff (rev 0) +++ add_missing_rwlock_unlocks_in_xprt_register.diff 2015-11-07 13:03:05 UTC (rev 146375) @@ -0,0 +1,61 @@ +From 4f1503e84b2f7bd229a097335e52fb8203f5bb0b Mon Sep 17 00:00:00 2001 +From: Michael Forney <[email protected]> +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 <[email protected]> +Signed-off-by: Steve Dickson <[email protected]> +--- + 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 + Deleted: fix_missing_rpc_get_default_domain.patch =================================================================== --- fix_missing_rpc_get_default_domain.patch 2015-11-07 12:57:35 UTC (rev 146374) +++ fix_missing_rpc_get_default_domain.patch 2015-11-07 13:03:05 UTC (rev 146375) @@ -1,88 +0,0 @@ -diff -Naur a/src/Makefile.am b/src/Makefile.am ---- a/src/Makefile.am 2015-06-16 17:35:08.000000000 +0200 -+++ b/src/Makefile.am 2015-06-17 21:23:05.185276962 +0200 -@@ -69,7 +69,7 @@ - endif - - libtirpc_la_SOURCES += key_call.c key_prot_xdr.c getpublickey.c --libtirpc_la_SOURCES += netname.c netnamer.c rtime.c -+libtirpc_la_SOURCES += netname.c netnamer.c rpcdname.c rtime.c - - CLEANFILES = cscope.* *~ - DISTCLEANFILES = Makefile.in -diff -Naur a/src/rpcdname.c b/src/rpcdname.c ---- a/src/rpcdname.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/src/rpcdname.c 2015-06-17 21:23:05.186276982 +0200 -@@ -0,0 +1,72 @@ -+/* -+ * Copyright (c) 2009, Sun Microsystems, Inc. -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without -+ * modification, are permitted provided that the following conditions are met: -+ * - Redistributions of source code must retain the above copyright notice, -+ * this list of conditions and the following disclaimer. -+ * - Redistributions in binary form must reproduce the above copyright notice, -+ * this list of conditions and the following disclaimer in the documentation -+ * and/or other materials provided with the distribution. -+ * - Neither the name of Sun Microsystems, Inc. nor the names of its -+ * contributors may be used to endorse or promote products derived -+ * from this software without specific prior written permission. -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -+ * POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+/* -+ * rpcdname.c -+ * Gets the default domain name -+ */ -+ -+#include <stdlib.h> -+#include <unistd.h> -+#include <string.h> -+ -+static char *default_domain = 0; -+ -+static char * -+get_default_domain() -+{ -+ char temp[256]; -+ -+ if (default_domain) -+ return (default_domain); -+ if (getdomainname(temp, sizeof(temp)) < 0) -+ return (0); -+ if ((int) strlen(temp) > 0) { -+ default_domain = (char *)malloc((strlen(temp)+(unsigned)1)); -+ if (default_domain == 0) -+ return (0); -+ (void) strcpy(default_domain, temp); -+ return (default_domain); -+ } -+ return (0); -+} -+ -+/* -+ * This is a wrapper for the system call getdomainname which returns a -+ * ypclnt.h error code in the failure case. It also checks to see that -+ * the domain name is non-null, knowing that the null string is going to -+ * get rejected elsewhere in the NIS client package. -+ */ -+int -+__rpc_get_default_domain(domain) -+ char **domain; -+{ -+ if ((*domain = get_default_domain()) != 0) -+ return (0); -+ return (-1); -+}
