diff options
Diffstat (limited to 'lib/libc/rpc/rpcb_clnt.c')
-rw-r--r-- | lib/libc/rpc/rpcb_clnt.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/libc/rpc/rpcb_clnt.c b/lib/libc/rpc/rpcb_clnt.c index b75c0a9..e1400cc 100644 --- a/lib/libc/rpc/rpcb_clnt.c +++ b/lib/libc/rpc/rpcb_clnt.c @@ -459,8 +459,14 @@ local_rpcb() client = clnt_vc_create(sock, &nbuf, (rpcprog_t)RPCBPROG, (rpcvers_t)RPCBVERS, tsize, tsize); - if (client != NULL) + if (client != NULL) { + /* Mark the socket to be closed in destructor */ + (void) CLNT_CONTROL(client, CLSET_FD_CLOSE, NULL); return client; + } + + /* Nobody needs this socket anymore; free the descriptor. */ + _close(sock); try_nconf: @@ -552,6 +558,7 @@ rpcb_set(program, version, nconf, address) parms.r_addr = taddr2uaddr((struct netconfig *) nconf, (struct netbuf *)address); if (!parms.r_addr) { + CLNT_DESTROY(client); rpc_createerr.cf_stat = RPC_N2AXLATEFAILURE; return (FALSE); /* no universal address */ } |