diff options
author | jlemon <jlemon@FreeBSD.org> | 2003-02-26 13:55:13 +0000 |
---|---|---|
committer | jlemon <jlemon@FreeBSD.org> | 2003-02-26 13:55:13 +0000 |
commit | cdfe62aafbb441acdb1e2168a9d9e599976128c7 (patch) | |
tree | 9c24fee96b0007eb0d16be53cceb48c4549d5736 /sys/netinet | |
parent | 1f8bf0512e8aeb2f31eccca8d86c1ee4518413b1 (diff) | |
download | FreeBSD-src-cdfe62aafbb441acdb1e2168a9d9e599976128c7.zip FreeBSD-src-cdfe62aafbb441acdb1e2168a9d9e599976128c7.tar.gz |
The TCP protocol lock may still be held if the reassembly queue dropped FIN.
Detect this case and drop the lock accordingly.
Sponsored by: DARPA, NAI Labs
Diffstat (limited to 'sys/netinet')
-rw-r--r-- | sys/netinet/tcp_input.c | 3 | ||||
-rw-r--r-- | sys/netinet/tcp_reass.c | 3 |
2 files changed, 4 insertions, 2 deletions
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index 63d1c1c..2fec783 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -2217,7 +2217,8 @@ check_delack: callout_reset(tp->tt_delack, tcp_delacktime, tcp_timer_delack, tp); } - KASSERT(headlocked == 0, ("headlocked should be 0")); + if (headlocked) + INP_INFO_WUNLOCK(&tcbinfo); INP_UNLOCK(inp); return; diff --git a/sys/netinet/tcp_reass.c b/sys/netinet/tcp_reass.c index 63d1c1c..2fec783 100644 --- a/sys/netinet/tcp_reass.c +++ b/sys/netinet/tcp_reass.c @@ -2217,7 +2217,8 @@ check_delack: callout_reset(tp->tt_delack, tcp_delacktime, tcp_timer_delack, tp); } - KASSERT(headlocked == 0, ("headlocked should be 0")); + if (headlocked) + INP_INFO_WUNLOCK(&tcbinfo); INP_UNLOCK(inp); return; |