| 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 |
| |