summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2011-02-04 14:13:15 +0000
committerjhb <jhb@FreeBSD.org>2011-02-04 14:13:15 +0000
commita8ce1decaaa68bd7263d75af24a5d26212201174 (patch)
tree5c1a7670225b423d7993f768ab3662b45b44cb98 /sys
parent3d83f190f7e4e938069f600cb2acc6a3458ab514 (diff)
downloadFreeBSD-src-a8ce1decaaa68bd7263d75af24a5d26212201174.zip
FreeBSD-src-a8ce1decaaa68bd7263d75af24a5d26212201174.tar.gz
When turning off TCP_NOPUSH, only call tcp_output() to immediately flush
any pending data if the connection is established. Submitted by: csjp Reviewed by: lstewart MFC after: 1 week
Diffstat (limited to 'sys')
-rw-r--r--sys/netinet/tcp_usrreq.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/sys/netinet/tcp_usrreq.c b/sys/netinet/tcp_usrreq.c
index b2fce82..6acf9da 100644
--- a/sys/netinet/tcp_usrreq.c
+++ b/sys/netinet/tcp_usrreq.c
@@ -1328,9 +1328,10 @@ tcp_ctloutput(struct socket *so, struct sockopt *sopt)
INP_WLOCK_RECHECK(inp);
if (optval)
tp->t_flags |= TF_NOPUSH;
- else {
+ else if (tp->t_flags & TF_NOPUSH) {
tp->t_flags &= ~TF_NOPUSH;
- error = tcp_output(tp);
+ if (TCPS_HAVEESTABLISHED(tp->t_state))
+ error = tcp_output(tp);
}
INP_WUNLOCK(inp);
break;
OpenPOWER on IntegriCloud