Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sys/kern/uipc_socket.c,v retrieving revision 1.44.6.3 retrieving revision 1.45 diff -u -p -r1.44.6.3 -r1.45 --- src/sys/kern/uipc_socket.c 1999/11/30 13:34:48 1.44.6.3 +++ src/sys/kern/uipc_socket.c 1999/05/15 16:42:48 1.45 @@ -1,4 +1,4 @@ -/* $NetBSD: uipc_socket.c,v 1.44.6.3 1999/11/30 13:34:48 itojun Exp $ */ +/* $NetBSD: uipc_socket.c,v 1.45 1999/05/15 16:42:48 tv Exp $ */ /* * Copyright (c) 1982, 1986, 1988, 1990, 1993 @@ -404,12 +404,8 @@ restart: s = splsoftnet(); if (so->so_state & SS_CANTSENDMORE) snderr(EPIPE); - if (so->so_error) { - error = so->so_error; - so->so_error = 0; - splx(s); - goto release; - } + if (so->so_error) + snderr(so->so_error); if ((so->so_state & SS_ISCONNECTED) == 0) { if (so->so_proto->pr_flags & PR_CONNREQUIRED) { if ((so->so_state & SS_ISCONFIRMING) == 0 && @@ -496,25 +492,25 @@ nopages: break; } } while (space > 0 && atomic); - - s = splsoftnet(); - - if (so->so_state & SS_CANTSENDMORE) - snderr(EPIPE); if (dontroute) so->so_options |= SO_DONTROUTE; if (resid > 0) so->so_state |= SS_MORETOCOME; - error = (*so->so_proto->pr_usrreq)(so, - (flags & MSG_OOB) ? PRU_SENDOOB : PRU_SEND, - top, addr, control, p); + + s = splsoftnet(); /* XXX */ + if (so->so_state & SS_CANTSENDMORE) + error = EPIPE; + else + error = (*so->so_proto->pr_usrreq)(so, + (flags & MSG_OOB) ? PRU_SENDOOB : PRU_SEND, + top, addr, control, p); + splx(s); + if (dontroute) so->so_options &= ~SO_DONTROUTE; if (resid > 0) so->so_state &= ~SS_MORETOCOME; - splx(s); - clen = 0; control = 0; top = 0;