summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--contrib/netbsd-tests/lib/libc/rpc/t_rpc.c4
-rw-r--r--lib/libc/rpc/svc.c10
2 files changed, 6 insertions, 8 deletions
diff --git a/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c b/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c
index e5d4321..59bcd55 100644
--- a/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c
+++ b/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c
@@ -325,10 +325,6 @@ ATF_TC_HEAD(raw, tc)
ATF_TC_BODY(raw, tc)
{
-#ifdef __FreeBSD__
- atf_tc_expect_fail("fails with: clnt_call: "
- "RPC: Can't decode result -- PR # 211804");
-#endif
rawtest(NULL);
}
diff --git a/lib/libc/rpc/svc.c b/lib/libc/rpc/svc.c
index 507d2e2..a002216 100644
--- a/lib/libc/rpc/svc.c
+++ b/lib/libc/rpc/svc.c
@@ -108,18 +108,19 @@ xprt_register(SVCXPRT *xprt)
rwlock_wrlock(&svc_fd_lock);
if (__svc_xports == NULL) {
__svc_xports = (SVCXPRT **)
- mem_alloc(FD_SETSIZE * sizeof(SVCXPRT *));
+ mem_alloc((FD_SETSIZE + 1) * sizeof(SVCXPRT *));
if (__svc_xports == NULL) {
rwlock_unlock(&svc_fd_lock);
return;
}
- memset(__svc_xports, '\0', FD_SETSIZE * sizeof(SVCXPRT *));
+ memset(__svc_xports, '\0', (FD_SETSIZE + 1) * sizeof(SVCXPRT *));
}
if (sock < FD_SETSIZE) {
__svc_xports[sock] = xprt;
FD_SET(sock, &svc_fdset);
svc_maxfd = max(svc_maxfd, sock);
- }
+ } else if (sock == FD_SETSIZE)
+ __svc_xports[sock] = xprt;
rwlock_unlock(&svc_fd_lock);
}
@@ -157,7 +158,8 @@ __xprt_do_unregister(SVCXPRT *xprt, bool_t dolock)
if (__svc_xports[svc_maxfd])
break;
}
- }
+ } else if ((sock == FD_SETSIZE) && (__svc_xports[sock] == xprt))
+ __svc_xports[sock] = NULL;
if (dolock)
rwlock_unlock(&svc_fd_lock);
}
OpenPOWER on IntegriCloud