diff mbox series

Shellscript stops before completing

Message ID 20200616083448.1563485-1-sbabic@denx.de
State Accepted
Headers show
Series Shellscript stops before completing | expand

Commit Message

Stefano Babic June 16, 2020, 8:34 a.m. UTC
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>
---
 core/pctl.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff mbox series

Patch

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]);