[arch-commits] Commit in lib32-libtirpc/trunk (3 files)

Maxime Gauduin alucryd at archlinux.org
Sat Nov 7 13:03:05 UTC 2015


    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 <rafael.f.f1 at gmail.com>
 
 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 <mforney at 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 <mforney at mforney.org>
+Signed-off-by: Steve Dickson <steved at 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
+

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);
-+}



More information about the arch-commits mailing list