From: Jo-Philipp Wich <jow@openwrt.org>
Date: Sat, 2 Jun 2012 14:56:24 +0000 (+0000)
Subject: uhttpd: add explicit stdin eof notification for Lua and CGI childs
X-Git-Tag: reboot~13720
X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=2cf72776d89f96eb6184b084992894c86a62cd00;p=openwrt%2Fstaging%2Fblogic.git

uhttpd: add explicit stdin eof notification for Lua and CGI childs

SVN-Revision: 32027
---

diff --git a/package/uhttpd/Makefile b/package/uhttpd/Makefile
index 13da14dfe92d..9d8f9fa95d3f 100644
--- a/package/uhttpd/Makefile
+++ b/package/uhttpd/Makefile
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=uhttpd
-PKG_RELEASE:=34
+PKG_RELEASE:=35
 
 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
 PKG_CONFIG_DEPENDS := \
diff --git a/package/uhttpd/src/uhttpd-cgi.c b/package/uhttpd/src/uhttpd-cgi.c
index 2f7ea7afaa77..5e445ca37252 100644
--- a/package/uhttpd/src/uhttpd-cgi.c
+++ b/package/uhttpd/src/uhttpd-cgi.c
@@ -181,6 +181,10 @@ static bool uh_cgi_socket_cb(struct client *cl)
 		/* ... write to CGI process */
 		len = uh_raw_send(state->wfd, buf, len,
 						  cl->server->conf->script_timeout);
+
+		/* explicit EOF notification for the child */
+		if (state->content_length <= 0)
+			close(state->wfd);
 	}
 
 	/* try to read data from child */
diff --git a/package/uhttpd/src/uhttpd-lua.c b/package/uhttpd/src/uhttpd-lua.c
index 7d602f7c585e..e8d932b47b42 100644
--- a/package/uhttpd/src/uhttpd-lua.c
+++ b/package/uhttpd/src/uhttpd-lua.c
@@ -298,9 +298,13 @@ static bool uh_lua_socket_cb(struct client *cl)
 		else
 			state->content_length = 0;
 
-		/* ... write to CGI process */
+		/* ... write to Lua process */
 		len = uh_raw_send(state->wfd, buf, len,
 						  cl->server->conf->script_timeout);
+
+		/* explicit EOF notification for the child */
+		if (state->content_length <= 0)
+			close(state->wfd);
 	}
 
 	/* try to read data from child */