diff options
author | rwatson <rwatson@FreeBSD.org> | 2004-06-18 20:22:21 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2004-06-18 20:22:21 +0000 |
commit | 15ddd25f67b746da9cdf0da0ae4a0c3481eb0c04 (patch) | |
tree | 21208851b02e9ff64dc154618f8340b9dd3aad68 /sys/netinet/tcp_usrreq.c | |
parent | e57eac4be2487a6e3b24c40052e828e9a5081d12 (diff) | |
download | FreeBSD-src-15ddd25f67b746da9cdf0da0ae4a0c3481eb0c04.zip FreeBSD-src-15ddd25f67b746da9cdf0da0ae4a0c3481eb0c04.tar.gz |
In tcp_ctloutput(), don't hold the inpcb lock over a call to
ip_ctloutput(), as it may need to perform blocking memory allocations.
This also improves consistency with locking relative to other points
that call into ip_ctloutput().
Bumped into by: Grover Lines <grover@ceribus.net>
Diffstat (limited to 'sys/netinet/tcp_usrreq.c')
-rw-r--r-- | sys/netinet/tcp_usrreq.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/netinet/tcp_usrreq.c b/sys/netinet/tcp_usrreq.c index fa95920..e5b57da 100644 --- a/sys/netinet/tcp_usrreq.c +++ b/sys/netinet/tcp_usrreq.c @@ -1037,13 +1037,13 @@ tcp_ctloutput(so, sopt) INP_LOCK(inp); INP_INFO_RUNLOCK(&tcbinfo); if (sopt->sopt_level != IPPROTO_TCP) { + INP_UNLOCK(inp); #ifdef INET6 if (INP_CHECK_SOCKAF(so, AF_INET6)) error = ip6_ctloutput(so, sopt); else #endif /* INET6 */ error = ip_ctloutput(so, sopt); - INP_UNLOCK(inp); splx(s); return (error); } |