summaryrefslogtreecommitdiffstats
path: root/sys/netinet/tcp_output.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netinet/tcp_output.c')
-rw-r--r--sys/netinet/tcp_output.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c
index 40ed7ee..dd2832b 100644
--- a/sys/netinet/tcp_output.c
+++ b/sys/netinet/tcp_output.c
@@ -126,6 +126,7 @@ tcp_output(tp)
#ifdef INET6
int isipv6;
#endif
+ int soopts;
#ifdef INET6
isipv6 = (tp->t_inpcb->inp_vflag & INP_IPV6) != 0;
@@ -819,8 +820,12 @@ send:
/*
* Trace.
*/
- if (so->so_options & SO_DEBUG)
+ SOCK_LOCK(so);
+ if (so->so_options & SO_DEBUG) {
+ SOCK_UNLOCK(so);
tcp_trace(TA_OUTPUT, tp->t_state, tp, mtod(m, void *), th, 0);
+ } else
+ SOCK_UNLOCK(so);
#endif
/*
@@ -854,10 +859,13 @@ send:
goto out;
}
#endif /*IPSEC*/
+ SOCK_LOCK(so);
+ soopts = (so->so_options & SO_DONTROUTE);
+ SOCK_UNLOCK(so);
error = ip6_output(m,
tp->t_inpcb->in6p_outputopts,
&tp->t_inpcb->in6p_route,
- (so->so_options & SO_DONTROUTE), NULL, NULL);
+ soopts, NULL, NULL);
} else
#endif /* INET6 */
{
@@ -889,8 +897,11 @@ send:
#ifdef IPSEC
ipsec_setsocket(m, so);
#endif /*IPSEC*/
+ SOCK_LOCK(so);
+ soopts = (so->so_options & SO_DONTROUTE);
+ SOCK_UNLOCK(so);
error = ip_output(m, tp->t_inpcb->inp_options, &tp->t_inpcb->inp_route,
- (so->so_options & SO_DONTROUTE), 0);
+ soopts, 0);
}
if (error) {
OpenPOWER on IntegriCloud