svn commit: r206736 - stable/8/sys/netinet
Randall Stewart
rrs at FreeBSD.org
Sat Apr 17 04:06:40 UTC 2010
Author: rrs
Date: Sat Apr 17 04:06:40 2010
New Revision: 206736
URL: http://svn.freebsd.org/changeset/base/206736
Log:
MFC of 204096
One of Michaels changes to fix some sign issues and
some minor locking.
Modified:
stable/8/sys/netinet/sctp_usrreq.c
stable/8/sys/netinet/sctputil.c
Directory Properties:
stable/8/sys/ (props changed)
stable/8/sys/amd64/include/xen/ (props changed)
stable/8/sys/cddl/contrib/opensolaris/ (props changed)
stable/8/sys/contrib/dev/acpica/ (props changed)
stable/8/sys/contrib/pf/ (props changed)
stable/8/sys/dev/xen/xenpci/ (props changed)
Modified: stable/8/sys/netinet/sctp_usrreq.c
==============================================================================
--- stable/8/sys/netinet/sctp_usrreq.c Sat Apr 17 04:02:27 2010 (r206735)
+++ stable/8/sys/netinet/sctp_usrreq.c Sat Apr 17 04:06:40 2010 (r206736)
@@ -980,7 +980,9 @@ sctp_shutdown(struct socket *so)
/* For UDP model this is a invalid call */
if (inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) {
/* Restore the flags that the soshutdown took away. */
+ SOCKBUF_LOCK(&so->so_rcv);
so->so_rcv.sb_state &= ~SBS_CANTRCVMORE;
+ SOCKBUF_UNLOCK(&so->so_rcv);
/* This proc will wakeup for read and do nothing (I hope) */
SCTP_INP_RUNLOCK(inp);
SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, EOPNOTSUPP);
@@ -4465,6 +4467,15 @@ sctp_connect(struct socket *so, struct s
if (stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) {
stcb->sctp_ep->sctp_flags |= SCTP_PCB_FLAGS_CONNECTED;
/* Set the connected flag so we can queue data */
+ SOCKBUF_LOCK(&so->so_rcv);
+ so->so_rcv.sb_state &= ~SBS_CANTRCVMORE;
+ SOCKBUF_UNLOCK(&so->so_rcv);
+ SOCKBUF_LOCK(&so->so_snd);
+ so->so_snd.sb_state &= ~SBS_CANTSENDMORE;
+ SOCKBUF_UNLOCK(&so->so_snd);
+ SOCK_LOCK(so);
+ so->so_state &= ~SS_ISDISCONNECTING;
+ SOCK_UNLOCK(so);
soisconnecting(so);
}
SCTP_SET_STATE(&stcb->asoc, SCTP_STATE_COOKIE_WAIT);
Modified: stable/8/sys/netinet/sctputil.c
==============================================================================
--- stable/8/sys/netinet/sctputil.c Sat Apr 17 04:02:27 2010 (r206735)
+++ stable/8/sys/netinet/sctputil.c Sat Apr 17 04:06:40 2010 (r206736)
@@ -849,7 +849,7 @@ retry:
uint32_t
sctp_select_a_tag(struct sctp_inpcb *inp, uint16_t lport, uint16_t rport, int save_in_twait)
{
- u_long x, not_done;
+ uint32_t x, not_done;
struct timeval now;
(void)SCTP_GETTIME_TIMEVAL(&now);
@@ -2770,8 +2770,6 @@ sctp_pad_lastmbuf(struct mbuf *m, int pa
return (EFAULT);
}
-int sctp_asoc_change_wake = 0;
-
static void
sctp_notify_assoc_change(uint32_t event, struct sctp_tcb *stcb,
uint32_t error, void *data, int so_locked
@@ -2825,7 +2823,6 @@ sctp_notify_assoc_change(uint32_t event,
SCTP_SOCKET_UNLOCK(so, 1);
}
#endif
- sctp_asoc_change_wake++;
}
if (sctp_is_feature_off(stcb->sctp_ep, SCTP_PCB_FLAGS_RECVASSOCEVNT)) {
/* event not enabled */
More information about the svn-src-stable-8
mailing list