--- sys/rpc/svc_vc.c.xprtdied	2021-03-19 06:34:06.297545000 -0700
+++ sys/rpc/svc_vc.c	2021-03-19 07:02:39.997212000 -0700
@@ -559,19 +559,26 @@ static enum xprt_stat
 svc_vc_stat(SVCXPRT *xprt)
 {
 	struct cf_conn *cd;
+	enum xprt_stat rstat;
 
 	cd = (struct cf_conn *)(xprt->xp_p1);
 
+	rstat = XPRT_IDLE;
+	sx_xlock(&xprt->xp_lock);
 	if (cd->strm_stat == XPRT_DIED)
-		return (XPRT_DIED);
+		rstat = XPRT_DIED;
+	else if (cd->mreq != NULL && cd->resid == 0 && cd->eor)
+		rstat = XPRT_MOREREQS;
 
-	if (cd->mreq != NULL && cd->resid == 0 && cd->eor)
-		return (XPRT_MOREREQS);
+	if (rstat == XPRT_IDLE) {
+		SOCKBUF_LOCK(&xprt->xp_socket->so_rcv);
+		if (soreadable(xprt->xp_socket))
+			rstat = XPRT_MOREREQS;
+		SOCKBUF_UNLOCK(&xprt->xp_socket->so_rcv);
+	}
+	sx_xunlock(&xprt->xp_lock);
 
-	if (soreadable(xprt->xp_socket))
-		return (XPRT_MOREREQS);
-
-	return (XPRT_IDLE);
+	return (rstat);
 }
 
 static bool_t
