12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- From bd08e45d7b25f06da2fc6dc824146b471db5f1f4 Mon Sep 17 00:00:00 2001
- From: Stefano Babic <sbabic@denx.de>
- Date: Tue, 16 Jun 2020 10:29:55 +0200
- Subject: [PATCH] Shellscript stops before completing
- Commit 8fb94d7 reworks the way shell script are called, redirecting
- stdout and stderr to SWUpdate. A shell script runs then in a child
- process. Under some circumstances, SWUpdate closes the forked process
- before the child process completes.
- Be sure that the child process has terminated before to go on.
- Signed-off-by: Stefano Babic <sbabic@denx.de>
- Reported-by: Piotr Piwko <piotr.piwko@gmail.com>
- Tested-by: Piotr Piwko <piotr.piwko@gmail.com>
- Signed-off-by: Joris Offouga <offougajoris@gmail.com>
- ---
- core/pctl.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
- diff --git a/core/pctl.c b/core/pctl.c
- index 8b1c667..01ad540 100644
- --- a/core/pctl.c
- +++ b/core/pctl.c
- @@ -263,6 +263,7 @@ int run_system_cmd(const char *cmd)
- }
- } else {
- int fds[2];
- + pid_t w;
-
- close(stdoutpipe[PIPE_WRITE]);
- close(stderrpipe[PIPE_WRITE]);
- @@ -276,7 +277,6 @@ int run_system_cmd(const char *cmd)
- * and from stderr (of the child process) as ERROR
- */
- do {
- - pid_t w;
- int n1 = 0;
- struct timeval tv;
- fd_set readfds;
- @@ -373,7 +373,7 @@ int run_system_cmd(const char *cmd)
- }
- }
- } while (ret > 0 && n1 > 0);
- - } while (!WIFEXITED(wstatus));
- + } while (w != process_id);
-
- close(stdoutpipe[PIPE_READ]);
- close(stderrpipe[PIPE_READ]);
- --
- 2.25.1
|