svn commit: r240985 - head/sys/netinet
Gleb Smirnoff
glebius at FreeBSD.org
Thu Sep 27 07:13:22 UTC 2012
Author: glebius
Date: Thu Sep 27 07:13:21 2012
New Revision: 240985
URL: http://svn.freebsd.org/changeset/base/240985
Log:
Fix bug in TCP_KEEPCNT setting, which slipped in in the last round
of reviewing of r231025.
Unlike other options from this family TCP_KEEPCNT doesn't specify
time interval, but a count, thus parameter supplied doesn't need
to be multiplied by hz.
Reported & tested by: amdmi3
Modified:
head/sys/netinet/tcp_usrreq.c
Modified: head/sys/netinet/tcp_usrreq.c
==============================================================================
--- head/sys/netinet/tcp_usrreq.c Thu Sep 27 06:05:54 2012 (r240984)
+++ head/sys/netinet/tcp_usrreq.c Thu Sep 27 07:13:21 2012 (r240985)
@@ -1473,7 +1473,6 @@ unlock_and_done:
case TCP_KEEPIDLE:
case TCP_KEEPINTVL:
- case TCP_KEEPCNT:
case TCP_KEEPINIT:
INP_WUNLOCK(inp);
error = sooptcopyin(sopt, &ui, sizeof(ui), sizeof(ui));
@@ -1506,13 +1505,6 @@ unlock_and_done:
tcp_timer_activate(tp, TT_2MSL,
TP_MAXIDLE(tp));
break;
- case TCP_KEEPCNT:
- tp->t_keepcnt = ui;
- if ((tp->t_state == TCPS_FIN_WAIT_2) &&
- (TP_MAXIDLE(tp) > 0))
- tcp_timer_activate(tp, TT_2MSL,
- TP_MAXIDLE(tp));
- break;
case TCP_KEEPINIT:
tp->t_keepinit = ui;
if (tp->t_state == TCPS_SYN_RECEIVED ||
@@ -1523,6 +1515,20 @@ unlock_and_done:
}
goto unlock_and_done;
+ case TCP_KEEPCNT:
+ INP_WUNLOCK(inp);
+ error = sooptcopyin(sopt, &ui, sizeof(ui), sizeof(ui));
+ if (error)
+ return (error);
+
+ INP_WLOCK_RECHECK(inp);
+ tp->t_keepcnt = ui;
+ if ((tp->t_state == TCPS_FIN_WAIT_2) &&
+ (TP_MAXIDLE(tp) > 0))
+ tcp_timer_activate(tp, TT_2MSL,
+ TP_MAXIDLE(tp));
+ goto unlock_and_done;
+
default:
INP_WUNLOCK(inp);
error = ENOPROTOOPT;
More information about the svn-src-head
mailing list