httpd: treat errors from stdin correctly.
authorDenys Vlasenko <vda.linux@googlemail.com>
Wed, 11 Sep 2013 12:59:21 +0000 (14:59 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Wed, 11 Sep 2013 12:59:21 +0000 (14:59 +0200)
commitfbe250db76b409a99457b47486a09b57677d5108
tree1b222f195c0947502c46d375e35f549eb4cbe9b0
parentb5352078a7eb16c33404a8b079aaa9c2b994546c
httpd: treat errors from stdin correctly.

Fron bug report:

If a CGI or proxied connection is rudely aborted (SIG_{KILL,BUS,SEGV})
then httpd will spin madly the poll loop in:

networking/httpd.c:1080
cgi_io_loop_and_exit()

Upon investigation I found that pfd[0].revents == 0x0018 (POLLHUP|POLLERR),
which leads to empty read, but the pfd[0].fd (STDIN_FILENO) is left open,
and in the FD list given to poll() which immediately returns to once
again inform the loop of (POLLHUP|POLLERR) condition of pfd[0].fd.
This continues until pfd[FROM_CGI].revents != 0

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
networking/httpd.c