diff options
Diffstat (limited to 'sys/kern/uipc_socket.c')
| -rw-r--r-- | sys/kern/uipc_socket.c | 32 | 
1 files changed, 20 insertions, 12 deletions
| diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c index 1efa8c531b3c8..05d312f65302b 100644 --- a/sys/kern/uipc_socket.c +++ b/sys/kern/uipc_socket.c @@ -31,7 +31,7 @@   * SUCH DAMAGE.   *   *	@(#)uipc_socket.c	8.3 (Berkeley) 4/15/94 - *	$Id: uipc_socket.c,v 1.50 1999/01/20 17:31:54 fenner Exp $ + *	$Id: uipc_socket.c,v 1.44 1998/08/31 15:34:55 wollman Exp $   */  #include <sys/param.h> @@ -218,7 +218,6 @@ soclose(so)  	int s = splnet();		/* conservative */  	int error = 0; -	funsetown(so->so_sigio);  	if (so->so_options & SO_ACCEPTCONN) {  		struct socket *sp, *sonext; @@ -529,9 +528,7 @@ nopages:  			((flags & MSG_EOF) &&  			 (so->so_proto->pr_flags & PR_IMPLOPCL) &&  			 (resid <= 0)) ? -				PRUS_EOF : -			/* If there is more to send set PRUS_MORETOCOME */ -			(resid > 0 && space > 0) ? PRUS_MORETOCOME : 0, +				PRUS_EOF : 0,  			top, addr, control, p);  		    splx(s);  		    if (dontroute) @@ -639,7 +636,10 @@ restart:  	    (so->so_rcv.sb_cc < so->so_rcv.sb_lowat ||  	    ((flags & MSG_WAITALL) && uio->uio_resid <= so->so_rcv.sb_hiwat)) &&  	    m->m_nextpkt == 0 && (pr->pr_flags & PR_ATOMIC) == 0)) { -		KASSERT(m != 0 || !so->so_rcv.sb_cc, ("receive 1")); +#ifdef DIAGNOSTIC +		if (m == 0 && so->so_rcv.sb_cc) +			panic("receive 1"); +#endif  		if (so->so_error) {  			if (m)  				goto dontblock; @@ -682,7 +682,10 @@ dontblock:  		uio->uio_procp->p_stats->p_ru.ru_msgrcv++;  	nextrecord = m->m_nextpkt;  	if (pr->pr_flags & PR_ADDR) { -		KASSERT(m->m_type == MT_SONAME, ("receive 1a")); +#ifdef DIAGNOSTIC +		if (m->m_type != MT_SONAME) +			panic("receive 1a"); +#endif  		orig_resid = 0;  		if (psa)  			*psa = dup_sockaddr(mtod(m, struct sockaddr *), @@ -736,9 +739,10 @@ dontblock:  				break;  		} else if (type == MT_OOBDATA)  			break; -		else -		    KASSERT(m->m_type == MT_DATA || m->m_type == MT_HEADER, -			("receive 3")); +#ifdef DIAGNOSTIC +		else if (m->m_type != MT_DATA && m->m_type != MT_HEADER) +			panic("receive 3"); +#endif  		so->so_state &= ~SS_RCVATMARK;  		len = uio->uio_resid;  		if (so->so_oobmark && len > so->so_oobmark - offset) @@ -1176,8 +1180,12 @@ void  sohasoutofband(so)  	register struct socket *so;  { -	if (so->so_sigio != NULL) -		pgsigio(so->so_sigio, SIGURG, 0); +	struct proc *p; + +	if (so->so_pgid < 0) +		gsignal(-so->so_pgid, SIGURG); +	else if (so->so_pgid > 0 && (p = pfind(so->so_pgid)) != 0) +		psignal(p, SIGURG);  	selwakeup(&so->so_rcv.sb_sel);  } | 
