Merge pull request #18 from sswen/duplex-13
[valgrind] memory referenced by child attributes not free'd
issues resolved in discussion
diff --git a/src/clnt_vc.c b/src/clnt_vc.c
index 174e7e2..57f2b23 100644
--- a/src/clnt_vc.c
+++ b/src/clnt_vc.c
@@ -312,7 +312,7 @@
if (ct->ct_addr.len)
mem_free(ct->ct_addr.buf, ct->ct_addr.len);
- if (xd->refcnt == 1) {
+ if (xd->refcnt == 0) {
XDR_DESTROY(&xd->shared.xdrs_in);
XDR_DESTROY(&xd->shared.xdrs_out);
free_x_vc_data(xd);
diff --git a/src/svc_vc.c b/src/svc_vc.c
index cabd325..e5071c1 100644
--- a/src/svc_vc.c
+++ b/src/svc_vc.c
@@ -658,10 +658,13 @@
mem_free(rdvs, sizeof(struct cf_rendezvous));
mem_free(xprt, sizeof(SVCXPRT));
- refcnt = rpc_dplx_unref(rec,
- RPC_DPLX_FLAG_LOCKED | RPC_DPLX_FLAG_UNLOCK);
- if (!refcnt)
- mem_free(xd, sizeof(struct x_vc_data));
+ (void)rpc_dplx_unref(rec, RPC_DPLX_FLAG_LOCKED | RPC_DPLX_FLAG_UNLOCK);
+
+ if (xd->refcnt == 0) {
+ XDR_DESTROY(&xd->shared.xdrs_in);
+ XDR_DESTROY(&xd->shared.xdrs_out);
+ free_x_vc_data(xd);
+ }
}
static void