summaryrefslogtreecommitdiffstats
path: root/sys/netinet/tcp_timer.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netinet/tcp_timer.c')
-rw-r--r--sys/netinet/tcp_timer.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/sys/netinet/tcp_timer.c b/sys/netinet/tcp_timer.c
index 6dfc8df..6b8698c 100644
--- a/sys/netinet/tcp_timer.c
+++ b/sys/netinet/tcp_timer.c
@@ -156,7 +156,8 @@ tcp_timer_delack(xtp)
}
INP_LOCK(inp);
INP_INFO_RUNLOCK(&tcbinfo);
- if (callout_pending(tp->tt_delack) || !callout_active(tp->tt_delack)) {
+ if ((inp->inp_vflag & INP_DROPPED) || callout_pending(tp->tt_delack)
+ || !callout_active(tp->tt_delack)) {
INP_UNLOCK(inp);
return;
}
@@ -193,12 +194,13 @@ tcp_timer_2msl(xtp)
*/
if (inp == NULL) {
tcp_timer_race++;
- INP_INFO_RUNLOCK(&tcbinfo);
+ INP_INFO_WUNLOCK(&tcbinfo);
return;
}
INP_LOCK(inp);
tcp_free_sackholes(tp);
- if (callout_pending(tp->tt_2msl) || !callout_active(tp->tt_2msl)) {
+ if ((inp->inp_vflag & INP_DROPPED) || callout_pending(tp->tt_2msl) ||
+ !callout_active(tp->tt_2msl)) {
INP_UNLOCK(tp->t_inpcb);
INP_INFO_WUNLOCK(&tcbinfo);
return;
@@ -323,11 +325,12 @@ tcp_timer_keep(xtp)
*/
if (inp == NULL) {
tcp_timer_race++;
- INP_INFO_RUNLOCK(&tcbinfo);
+ INP_INFO_WUNLOCK(&tcbinfo);
return;
}
INP_LOCK(inp);
- if (callout_pending(tp->tt_keep) || !callout_active(tp->tt_keep)) {
+ if ((inp->inp_vflag & INP_DROPPED) || callout_pending(tp->tt_keep)
+ || !callout_active(tp->tt_keep)) {
INP_UNLOCK(inp);
INP_INFO_WUNLOCK(&tcbinfo);
return;
@@ -413,11 +416,12 @@ tcp_timer_persist(xtp)
*/
if (inp == NULL) {
tcp_timer_race++;
- INP_INFO_RUNLOCK(&tcbinfo);
+ INP_INFO_WUNLOCK(&tcbinfo);
return;
}
INP_LOCK(inp);
- if (callout_pending(tp->tt_persist) || !callout_active(tp->tt_persist)){
+ if ((inp->inp_vflag & INP_DROPPED) || callout_pending(tp->tt_persist)
+ || !callout_active(tp->tt_persist)) {
INP_UNLOCK(inp);
INP_INFO_WUNLOCK(&tcbinfo);
return;
@@ -482,11 +486,12 @@ tcp_timer_rexmt(xtp)
*/
if (inp == NULL) {
tcp_timer_race++;
- INP_INFO_RUNLOCK(&tcbinfo);
+ INP_INFO_WUNLOCK(&tcbinfo);
return;
}
INP_LOCK(inp);
- if (callout_pending(tp->tt_rexmt) || !callout_active(tp->tt_rexmt)) {
+ if ((inp->inp_vflag & INP_DROPPED) || callout_pending(tp->tt_rexmt)
+ || !callout_active(tp->tt_rexmt)) {
INP_UNLOCK(inp);
INP_INFO_WUNLOCK(&tcbinfo);
return;
OpenPOWER on IntegriCloud