cgi-io: merge changes from luci2-io-helper

luci2-io-helper: bugfix buckup script read timeout

Reading files from stdin will block for ever. The uhttpd is killing the
backup process after script_timeout.

Switching read to non blocking mode and add a waitpid for the slave
process does not end in a script_timeout anymore.

Signed-off-by: Florian Eckert <Eckert.Florian@googlemail.com>
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
This commit is contained in:
Daniel Golle 2017-06-19 12:48:32 +02:00
parent 1f50e104f3
commit e7b5bdd9e9
2 changed files with 11 additions and 4 deletions

View File

@ -8,7 +8,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=cgi-io PKG_NAME:=cgi-io
PKG_RELEASE:=2 PKG_RELEASE:=3
PKG_LICENSE:=GPL-2.0+ PKG_LICENSE:=GPL-2.0+

View File

@ -577,6 +577,7 @@ main_backup(int argc, char **argv)
pid_t pid; pid_t pid;
time_t now; time_t now;
int len; int len;
int status;
int fds[2]; int fds[2];
char buf[4096]; char buf[4096];
char datestr[16] = { 0 }; char datestr[16] = { 0 };
@ -610,6 +611,7 @@ main_backup(int argc, char **argv)
return -1; return -1;
default: default:
fcntl(fds[0], F_SETFL, fcntl(fds[0], F_GETFL) | O_NONBLOCK);
now = time(NULL); now = time(NULL);
strftime(datestr, sizeof(datestr) - 1, "%Y-%m-%d", localtime(&now)); strftime(datestr, sizeof(datestr) - 1, "%Y-%m-%d", localtime(&now));
@ -621,10 +623,15 @@ main_backup(int argc, char **argv)
printf("Content-Disposition: attachment; " printf("Content-Disposition: attachment; "
"filename=\"backup-%s-%s.tar.gz\"\r\n\r\n", hostname, datestr); "filename=\"backup-%s-%s.tar.gz\"\r\n\r\n", hostname, datestr);
while ((len = read(fds[0], buf, sizeof(buf))) > 0) do {
fwrite(buf, len, 1, stdout); waitpid(pid, &status, 0);
waitpid(pid, NULL, 0); while ((len = read(fds[0], buf, sizeof(buf))) > 0) {
fwrite(buf, len, 1, stdout);
fflush(stdout);
}
} while (!WIFEXITED(status));
close(fds[0]); close(fds[0]);
close(fds[1]); close(fds[1]);