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