summaryrefslogtreecommitdiffstats
path: root/sys/netinet/tcp_reass.c
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2005-06-01 11:49:14 +0000
committerrwatson <rwatson@FreeBSD.org>2005-06-01 11:49:14 +0000
commitfe0bf623ad311f3aee6c729f327285b3baa24e34 (patch)
tree7b5b438e52cf3e55e55487ac032bb359a795de2b /sys/netinet/tcp_reass.c
parenta5b21ce8f450b6272d186c0b7b089d42650f93e3 (diff)
downloadFreeBSD-src-fe0bf623ad311f3aee6c729f327285b3baa24e34.zip
FreeBSD-src-fe0bf623ad311f3aee6c729f327285b3baa24e34.tar.gz
Assert the tcbinfo lock whenever tcp_close() is to be called by
tcp_input(). MFC after: 7 days
Diffstat (limited to 'sys/netinet/tcp_reass.c')
-rw-r--r--sys/netinet/tcp_reass.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/sys/netinet/tcp_reass.c b/sys/netinet/tcp_reass.c
index cbd4068..7392610 100644
--- a/sys/netinet/tcp_reass.c
+++ b/sys/netinet/tcp_reass.c
@@ -1539,11 +1539,16 @@ trimthenstep6:
close:
tp->t_state = TCPS_CLOSED;
tcpstat.tcps_drops++;
+ KASSERT(headlocked, ("tcp_input: "
+ "trimthenstep6: tcp_close: head not "
+ "locked"));
tp = tcp_close(tp);
break;
case TCPS_CLOSING:
case TCPS_LAST_ACK:
+ KASSERT(headlocked, ("trimthenstep6: "
+ "tcp_close.2: head not locked"));
tp = tcp_close(tp);
break;
@@ -1651,6 +1656,8 @@ trimthenstep6:
*/
if ((so->so_state & SS_NOFDREF) &&
tp->t_state > TCPS_CLOSE_WAIT && tlen) {
+ KASSERT(headlocked, ("trimthenstep6: tcp_close.3: head not "
+ "locked"));
tp = tcp_close(tp);
tcpstat.tcps_rcvafterclose++;
rstreason = BANDLIM_UNLIMITED;
@@ -1676,6 +1683,8 @@ trimthenstep6:
if (thflags & TH_SYN &&
tp->t_state == TCPS_TIME_WAIT &&
SEQ_GT(th->th_seq, tp->rcv_nxt)) {
+ KASSERT(headlocked, ("trimthenstep6: "
+ "tcp_close.4: head not locked"));
tp = tcp_close(tp);
goto findpcb;
}
@@ -2178,6 +2187,8 @@ process_ACK:
*/
case TCPS_LAST_ACK:
if (ourfinisacked) {
+ KASSERT(headlocked, ("tcp_input: process_ACK:"
+ " tcp_close: head not locked"));
tp = tcp_close(tp);
goto drop;
}
OpenPOWER on IntegriCloud