Blame SOURCES/libtirpc-0.2.4-mem-leak.patch

e062cf
diff -up libtirpc-0.2.4/src/svc_generic.c.orig libtirpc-0.2.4/src/svc_generic.c
e062cf
--- libtirpc-0.2.4/src/svc_generic.c.orig	2013-12-09 15:59:51.000000000 -0500
e062cf
+++ libtirpc-0.2.4/src/svc_generic.c	2015-06-29 10:20:27.239019533 -0400
e062cf
@@ -283,6 +283,8 @@ svc_tli_create(fd, nconf, bindaddr, send
e062cf
 	xprt->xp_type = __rpc_socktype2seman(si.si_socktype);
e062cf
 
e062cf
 	if (nconf) {
e062cf
+		if (xprt->xp_netid != NULL)
e062cf
+			free(xprt->xp_netid);
e062cf
 		xprt->xp_netid = strdup(nconf->nc_netid);
e062cf
 		xprt->xp_tp = strdup(nconf->nc_device);
e062cf
 	}
e062cf
diff -up libtirpc-0.2.4/src/svc_vc.c.orig libtirpc-0.2.4/src/svc_vc.c
e062cf
--- libtirpc-0.2.4/src/svc_vc.c.orig	2015-06-29 10:19:21.205835483 -0400
e062cf
+++ libtirpc-0.2.4/src/svc_vc.c	2015-06-29 10:20:34.616151809 -0400
e062cf
@@ -393,6 +393,12 @@ svc_vc_destroy(xprt)
e062cf
 	__svc_vc_dodestroy(xprt);
e062cf
 }
e062cf
 
e062cf
+static bool_t
e062cf
+__svc_rendezvous_socket(xprt)
e062cf
+	SVCXPRT *xprt;
e062cf
+{
e062cf
+	return (xprt->xp_ops->xp_recv == rendezvous_request);
e062cf
+}
e062cf
 static void
e062cf
 __svc_vc_dodestroy(xprt)
e062cf
 	SVCXPRT *xprt;
e062cf
@@ -404,7 +410,7 @@ __svc_vc_dodestroy(xprt)
e062cf
 
e062cf
 	if (xprt->xp_fd != RPC_ANYFD)
e062cf
 		(void)close(xprt->xp_fd);
e062cf
-	if (xprt->xp_port != 0) {
e062cf
+	if (__svc_rendezvous_socket(xprt)) {
e062cf
 		/* a rendezvouser socket */
e062cf
 		r = (struct cf_rendezvous *)xprt->xp_p1;
e062cf
 		mem_free(r, sizeof (struct cf_rendezvous));