diff options
| author | Andre Oppermann <andre@FreeBSD.org> | 2007-06-09 17:49:39 +0000 |
|---|---|---|
| committer | Andre Oppermann <andre@FreeBSD.org> | 2007-06-09 17:49:39 +0000 |
| commit | f58747375d5ea2cddc9d240ba6b7c706390c3972 (patch) | |
| tree | c98dffc6b58d75e6b53d015fe6b487cf3c34cc26 /sys/netinet/tcp_timer.c | |
| parent | 2bf083e4c9cc427bda21966bdcb1b34c83291d46 (diff) | |
Notes
Diffstat (limited to 'sys/netinet/tcp_timer.c')
| -rw-r--r-- | sys/netinet/tcp_timer.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/netinet/tcp_timer.c b/sys/netinet/tcp_timer.c index c861f129c85d..5afcbef34437 100644 --- a/sys/netinet/tcp_timer.c +++ b/sys/netinet/tcp_timer.c @@ -386,8 +386,14 @@ shutdown: INP_INFO_WLOCK(&tcbinfo); INP_LOCK(inp); - /* When tp is gone we've lost the race. */ - if (inp->inp_ppcb == NULL) { + /* + * XXX: When our tcpcb went into TIMEWAIT, is gone or no + * longer the one we used to work with we've lost the race. + * This race is inherent in the current socket/inpcb life + * cycle system. + */ + if ((inp->inp_vflag & INP_TIMEWAIT) || inp->inp_ppcb == NULL || + inp->inp_ppcb != tp) { CTR3(KTR_NET, "%p %s inp %p lost shutdown race", tp, __func__, inp); tcp_timer_race++; |
