kern/154504: [libc] recv(2): PF_LOCAL stream connection is
stuck in sbwait when recv(MSG_WAITALL) is used
Mikolaj Golub
trociny at freebsd.org
Sun Apr 10 13:50:13 UTC 2011
The following reply was made to PR kern/154504; it has been noted by GNATS.
From: Mikolaj Golub <trociny at freebsd.org>
To: Andrey Simonenko <simon at comsys.ntu-kpi.kiev.ua>
Cc: bug-followup at FreeBSD.org, freebsd-net at freebsd.org,
Pawel Jakub Dawidek <pjd at FreeBSD.org>, Kostik Belousov <kib at FreeBSD.org>
Subject: Re: kern/154504: [libc] recv(2): PF_LOCAL stream connection is stuck in sbwait when recv(MSG_WAITALL) is used
Date: Sun, 10 Apr 2011 16:49:25 +0300
--=-=-=
Hi,
Does the attached patch fix the problem for you?
--
Mikolaj Golub
--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment; filename=uipc_socket.c.soreceive.patch
Index: sys/kern/uipc_socket.c
===================================================================
--- sys/kern/uipc_socket.c (revision 220485)
+++ sys/kern/uipc_socket.c (working copy)
@@ -1845,10 +1845,16 @@ dontblock:
}
SBLASTRECORDCHK(&so->so_rcv);
SBLASTMBUFCHK(&so->so_rcv);
- error = sbwait(&so->so_rcv);
- if (error) {
- SOCKBUF_UNLOCK(&so->so_rcv);
- goto release;
+ /*
+ * We could receive some data while was notifying the
+ * the protocol. Skip blocking in this case.
+ */
+ if (so->so_rcv.sb_mb == NULL) {
+ error = sbwait(&so->so_rcv);
+ if (error) {
+ SOCKBUF_UNLOCK(&so->so_rcv);
+ goto release;
+ }
}
m = so->so_rcv.sb_mb;
if (m != NULL)
--=-=-=--
More information about the freebsd-bugs
mailing list