From: Sergio Durigan Junior Date: Fri, 3 Aug 2018 22:04:38 +0000 (-0400) Subject: Fix thinko when deciding whether to disable TCP's Nagle algorithm X-Git-Tag: users/ARM/embedded-binutils-master-2018q4~1182 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=425699f52d8fb875c2197b202b9e05bdc09d0115;p=external%2Fbinutils.git Fix thinko when deciding whether to disable TCP's Nagle algorithm This patch fixes a thinko that happened when I was implementing the IPv6 support on GDB/gdbserver. On certain situations, it is necessary to disable TCP's Nagle algorithm (NODELAY). For obvious reasons, this only applies when we are dealing with a TCP connection. While implementing the IPv6 patch, I noticed that the net_open function (on gdb/ser-tcp.c) kept a flag indicating whether the connection type was UDP or TCP. I eliminated that flag, and started using the 'struct addrinfo *' related to the successful connection directly. However, I made a mistake: if (success_ainfo->ai_socktype == IPPROTO_TCP) ^^^^^^^^^^^ { /* Disable Nagle algorithm. Needed in some cases. */ int tmp = 1; setsockopt (scb->fd, IPPROTO_TCP, TCP_NODELAY, (char *) &tmp, sizeof (tmp)); } The 'ai_socktype' field specifies the socket type (SOCK_STREAM or SOCK_DGRAM), and not the protocol. This test was always failing, and the Nagle algorithm was never being disabled. The obvious fix is to use the 'ai_protocol' field. This is what this patch does. Huge "thank you" to Joel Brobecker who reported the regression (he was experiencing an unusual delay while debugging a bare-metal program running under QEMU) and helped me set up a proper reproducer for the bug. gdb/ChangeLog: 2018-08-03 Sergio Durigan Junior * ser-tcp.c (net_open): Fix thinko when deciding whether to disable TCP's Nagle algorithm (use "ai_protocol" instead of "ai_socktype"). --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 227e3ff..4359456 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2018-08-03 Sergio Durigan Junior + + * ser-tcp.c (net_open): Fix thinko when deciding whether to + disable TCP's Nagle algorithm (use "ai_protocol" instead of + "ai_socktype"). + 2018-08-02 Tom Tromey PR symtab/16842. diff --git a/gdb/ser-tcp.c b/gdb/ser-tcp.c index 618d2d9..bdfd556 100644 --- a/gdb/ser-tcp.c +++ b/gdb/ser-tcp.c @@ -371,7 +371,7 @@ net_open (struct serial *scb, const char *name) ioctl (scb->fd, FIONBIO, &ioarg); - if (success_ainfo->ai_socktype == IPPROTO_TCP) + if (success_ainfo->ai_protocol == IPPROTO_TCP) { /* Disable Nagle algorithm. Needed in some cases. */ int tmp = 1;