From 988c9ae3568c3d9e7b720bd448880ce030c3cc48 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Wed, 18 Dec 2019 09:32:38 +0100 Subject: [PATCH] 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 --- Makefile | 2 +- src/main.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 5107cd6..27bdf73 100644 --- a/Makefile +++ b/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/src/main.c b/src/main.c index 778dc4c..7cf8d7b 100644 --- a/src/main.c +++ b/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; -- 2.30.2