After each label in tcp_input(), assert the inpcbinfo and inpcb lock

state that we expect.
This commit is contained in:
Robert Watson 2004-07-12 19:28:07 +00:00
parent 8375a14422
commit 7cfc690440
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=132044
2 changed files with 34 additions and 2 deletions

View File

@ -985,6 +985,8 @@ tcp_input(m, off0)
goto drop;
}
after_listen:
KASSERT(headlocked, ("tcp_input(): after_listen head is not locked"));
INP_LOCK_ASSERT(inp);
/* XXX temp debugging */
/* should not happen - syncache should pick up these connections */
@ -1472,6 +1474,10 @@ tcp_input(m, off0)
}
trimthenstep6:
KASSERT(headlocked,
("tcp_input(): trimthenstep6 head is not locked"));
INP_LOCK_ASSERT(inp);
/*
* Advance th->th_seq to correspond to first data byte.
* If data, trim to stay within window,
@ -2081,6 +2087,10 @@ tcp_input(m, off0)
}
process_ACK:
KASSERT(headlocked,
("tcp_input(): process_ACK head is not locked"));
INP_LOCK_ASSERT(inp);
acked = th->th_ack - tp->snd_una;
tcpstat.tcps_rcvackpack++;
tcpstat.tcps_rcvackbyte += acked;
@ -2261,6 +2271,9 @@ tcp_input(m, off0)
}
step6:
KASSERT(headlocked, ("tcp_input(): step6 head is not locked"));
INP_LOCK_ASSERT(inp);
/*
* Update window information.
* Don't look at window if no ACK: TAC's send garbage on first SYN.
@ -2343,7 +2356,9 @@ tcp_input(m, off0)
tp->rcv_up = tp->rcv_nxt;
}
dodata: /* XXX */
KASSERT(headlocked, ("headlocked"));
KASSERT(headlocked, ("tcp_input(): dodata head is not locked"));
INP_LOCK_ASSERT(inp);
/*
* Process the segment text, merging it into the TCP sequencing queue,
* and arranging for acknowledgment of receipt if necessary.
@ -2479,6 +2494,7 @@ tcp_input(m, off0)
(void) tcp_output(tp);
check_delack:
INP_LOCK_ASSERT(inp);
if (tp->t_flags & TF_DELACK) {
tp->t_flags &= ~TF_DELACK;
callout_reset(tp->tt_delack, tcp_delacktime,

View File

@ -985,6 +985,8 @@ tcp_input(m, off0)
goto drop;
}
after_listen:
KASSERT(headlocked, ("tcp_input(): after_listen head is not locked"));
INP_LOCK_ASSERT(inp);
/* XXX temp debugging */
/* should not happen - syncache should pick up these connections */
@ -1472,6 +1474,10 @@ tcp_input(m, off0)
}
trimthenstep6:
KASSERT(headlocked,
("tcp_input(): trimthenstep6 head is not locked"));
INP_LOCK_ASSERT(inp);
/*
* Advance th->th_seq to correspond to first data byte.
* If data, trim to stay within window,
@ -2081,6 +2087,10 @@ tcp_input(m, off0)
}
process_ACK:
KASSERT(headlocked,
("tcp_input(): process_ACK head is not locked"));
INP_LOCK_ASSERT(inp);
acked = th->th_ack - tp->snd_una;
tcpstat.tcps_rcvackpack++;
tcpstat.tcps_rcvackbyte += acked;
@ -2261,6 +2271,9 @@ tcp_input(m, off0)
}
step6:
KASSERT(headlocked, ("tcp_input(): step6 head is not locked"));
INP_LOCK_ASSERT(inp);
/*
* Update window information.
* Don't look at window if no ACK: TAC's send garbage on first SYN.
@ -2343,7 +2356,9 @@ tcp_input(m, off0)
tp->rcv_up = tp->rcv_nxt;
}
dodata: /* XXX */
KASSERT(headlocked, ("headlocked"));
KASSERT(headlocked, ("tcp_input(): dodata head is not locked"));
INP_LOCK_ASSERT(inp);
/*
* Process the segment text, merging it into the TCP sequencing queue,
* and arranging for acknowledgment of receipt if necessary.
@ -2479,6 +2494,7 @@ tcp_input(m, off0)
(void) tcp_output(tp);
check_delack:
INP_LOCK_ASSERT(inp);
if (tp->t_flags & TF_DELACK) {
tp->t_flags &= ~TF_DELACK;
callout_reset(tp->tt_delack, tcp_delacktime,