Re: [PATCH v12 04/20] index-helper: new daemon for caching index and related stuff
- From
- Eric Wong <e@80x24.org>
- Date
- Jun 26, 2016, 23:25 UTC
- Message-ID
- <20160626232500.GA3426@dcvr.yhbt.net>
- In-Reply-To
- <577015C5.8070407@novalis.org>
David Turner <novalis@novalis.org> wrote:
Show 27 quoted lines
> On 06/26/2016 04:53 AM, Eric Wong wrote: > >David Turner <novalis@novalis.org> wrote: > >>On 06/25/2016 10:33 AM, Duy Nguyen wrote: > >>>>+ /* > >>>>+ * Our connection to the client is blocking since a client > >>>>+ * can always be killed by SIGINT or similar. > >>>>+ */ > >>>>+ set_socket_blocking_flag(client_fd, 0); > >>> > >>>Out of curiosity, do we really need this? I thought default behavior > >>>was always blocking (and checked linux kernel, it seemed to agree with > >>>me). Maybe for extra safety because other OSes may default to > >>>something else? > >> > >>Yes -- see this bug report for details: > >>https://bugs.python.org/issue7995 > > > >I realize it's an issue with BSDs, but it still seems > >unnecessary, here: > > > >1) the packet_read => get_packet_data => read_in_full => xread > > call chain already poll()s on EAGAIN/EWOULDBLOCK. > > write_in_full => xwrite busy loops on EAGAIN/EWOULDBLOCK. > > xwrite should probably poll, too; but I guess EAGAIN is > > uncommon with small writes. > > That is a CPU-burning busy loop on a non-blocking socket.
Indeed, fixes proposed in (xread was also broken(!)): http://mid.gmane.org/20160626232112.721-3-e@80x24.org http://mid.gmane.org/20160626232112.721-2-e@80x24.org http://mid.gmane.org/20160626232112.721-1-e@80x24.org