From: Jo-Philipp Wich Date: Wed, 18 Dec 2019 08:32:38 +0000 (+0100) Subject: cgi-io: close pipe descriptors early X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=dde503da13d5d0541187e81eda15e7693f38cb4f;p=openwrt-packages.git cgi-io: close pipe descriptors early In the command read side, close the superfluous write end of the pipe early to ensure that EOF is reliably detected. Without that change, splice calls to read from the pipe will occasionally hang until the CGI process is eventually killed due to timeout. Signed-off-by: Jo-Philipp Wich --- diff --git a/net/cgi-io/Makefile b/net/cgi-io/Makefile index 5107cd61c..27bdf737f 100644 --- a/net/cgi-io/Makefile +++ b/net/cgi-io/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=cgi-io -PKG_RELEASE:=15 +PKG_RELEASE:=16 PKG_LICENSE:=GPL-2.0-or-later diff --git a/net/cgi-io/src/main.c b/net/cgi-io/src/main.c index 778dc4c63..7cf8d7b23 100644 --- a/net/cgi-io/src/main.c +++ b/net/cgi-io/src/main.c @@ -778,6 +778,8 @@ main_backup(int argc, char **argv) return -1; default: + close(fds[1]); + now = time(NULL); strftime(datestr, sizeof(datestr) - 1, "%Y-%m-%d", localtime(&now)); @@ -798,7 +800,6 @@ main_backup(int argc, char **argv) waitpid(pid, &status, 0); close(fds[0]); - close(fds[1]); return 0; } @@ -1010,6 +1011,8 @@ main_exec(int argc, char **argv) return -1; default: + close(fds[1]); + printf("Status: 200 OK\r\n"); printf("Content-Type: %s\r\n", fields[7] ? fields[7] : "application/octet-stream"); @@ -1028,7 +1031,6 @@ main_exec(int argc, char **argv) waitpid(pid, &status, 0); close(fds[0]); - close(fds[1]); free(args); return 0;