diff options
author | rwatson <rwatson@FreeBSD.org> | 2004-12-25 22:26:13 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2004-12-25 22:26:13 +0000 |
commit | 894710c9420492f20a9159e500e3e63ed3fa7899 (patch) | |
tree | 7ddc4f90cb86a3edc06e507af7131e819671619e /sys/netinet | |
parent | 203f380ce71b4a11bc70a767c0af75c72d657c74 (diff) | |
download | FreeBSD-src-894710c9420492f20a9159e500e3e63ed3fa7899.zip FreeBSD-src-894710c9420492f20a9159e500e3e63ed3fa7899.tar.gz |
In the dropafterack case of tcp_input(), it's OK to release the TCP
pcbinfo lock before calling tcp_output(), as holding just the inpcb
lock is sufficient to prevent garbage collection.
Diffstat (limited to 'sys/netinet')
-rw-r--r-- | sys/netinet/tcp_input.c | 2 | ||||
-rw-r--r-- | sys/netinet/tcp_reass.c | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index f3b158e..41fceac 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -2431,10 +2431,10 @@ dropafterack: &tcp_savetcp, 0); #endif KASSERT(headlocked, ("headlocked should be 1")); + INP_INFO_WUNLOCK(&tcbinfo); tp->t_flags |= TF_ACKNOW; (void) tcp_output(tp); INP_UNLOCK(inp); - INP_INFO_WUNLOCK(&tcbinfo); m_freem(m); return; diff --git a/sys/netinet/tcp_reass.c b/sys/netinet/tcp_reass.c index f3b158e..41fceac 100644 --- a/sys/netinet/tcp_reass.c +++ b/sys/netinet/tcp_reass.c @@ -2431,10 +2431,10 @@ dropafterack: &tcp_savetcp, 0); #endif KASSERT(headlocked, ("headlocked should be 1")); + INP_INFO_WUNLOCK(&tcbinfo); tp->t_flags |= TF_ACKNOW; (void) tcp_output(tp); INP_UNLOCK(inp); - INP_INFO_WUNLOCK(&tcbinfo); m_freem(m); return; |