summaryrefslogtreecommitdiff
path: root/networking/httpd.c
diff options
context:
space:
mode:
authorDenys Vlasenko2010-04-02 10:40:58 +0200
committerDenys Vlasenko2010-04-02 10:40:58 +0200
commit8fc9e6a15d23c7e20ef135d8f242406b0aa0e8af (patch)
treeea50038b66ef8aa1626c36abbcf2500869721e4c /networking/httpd.c
parent208d35d21fbae0f1c1aa3bed4ca97717565b76e2 (diff)
downloadbusybox-8fc9e6a15d23c7e20ef135d8f242406b0aa0e8af.zip
busybox-8fc9e6a15d23c7e20ef135d8f242406b0aa0e8af.tar.gz
httpd: fix proxy mode bug (annoying but harmless), better help text
function old new delta cgi_io_loop_and_exit 594 635 +41 packed_usage 26815 26841 +26 handle_incoming_and_exit 2745 2739 -6 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'networking/httpd.c')
-rw-r--r--networking/httpd.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/networking/httpd.c b/networking/httpd.c
index 8834c1c..6dbc219 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -1145,13 +1145,14 @@ static NOINLINE void cgi_io_loop_and_exit(int fromCgi_rd, int toCgi_wr, int post
/* post_len <= 0 && hdr_cnt <= 0:
* no more POST data to CGI,
* let CGI see EOF on CGI's stdin */
- close(toCgi_wr);
+ if (toCgi_wr != fromCgi_rd)
+ close(toCgi_wr);
toCgi_wr = 0;
}
}
/* Now wait on the set of sockets */
- count = safe_poll(pfd, 3, -1);
+ count = safe_poll(pfd, toCgi_wr ? TO_CGI+1 : FROM_CGI+1, -1);
if (count <= 0) {
#if 0
if (safe_waitpid(pid, &status, WNOHANG) <= 0) {
@@ -2103,8 +2104,7 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
header_ptr += 2;
write(proxy_fd, header_buf, header_ptr - header_buf);
free(header_buf); /* on the order of 8k, free it */
- /* cgi_io_loop_and_exit needs to have two distinct fds */
- cgi_io_loop_and_exit(proxy_fd, dup(proxy_fd), length);
+ cgi_io_loop_and_exit(proxy_fd, proxy_fd, length);
}
#endif