fade.c: Fix client_cmd()
authorAndre Noll <maan@systemlinux.org>
Sat, 17 Nov 2007 17:13:55 +0000 (18:13 +0100)
committerAndre Noll <maan@systemlinux.org>
Sat, 17 Nov 2007 17:13:55 +0000 (18:13 +0100)
We have to wait for children to terminate because otherwise the
client commands may be executed in random order.

Since no caller checked the return value of client_cmd(), make it
abort on errors and change the return value to void.

Also, each caller only passed one string, so make it take only a
char * pointer.

fade.c

diff --git a/fade.c b/fade.c
index f269f02..c86b938 100644 (file)
--- a/fade.c
+++ b/fade.c
@@ -149,7 +149,7 @@ out:
        close(mixer_fd);
 }
 
        close(mixer_fd);
 }
 
-static int client_cmd(const char *cmd,...)
+static void client_cmd(const char *cmd)
 {
        int ret, fds[3] = {0, 0, 0};
        pid_t pid;
 {
        int ret, fds[3] = {0, 0, 0};
        pid_t pid;
@@ -158,7 +158,11 @@ static int client_cmd(const char *cmd,...)
        PARA_INFO_LOG("%s\n", cmdline);
        ret = para_exec_cmdline_pid(&pid, cmdline, fds);
        free(cmdline);
        PARA_INFO_LOG("%s\n", cmdline);
        ret = para_exec_cmdline_pid(&pid, cmdline, fds);
        free(cmdline);
-       return ret;
+       if (ret < 0)
+               exit(EXIT_FAILURE);
+       do
+               ret = wait(NULL);
+       while (ret != -1 && errno != ECHILD);
 }
 
 static void change_afs_mode_and_play(char *afs_mode)
 }
 
 static void change_afs_mode_and_play(char *afs_mode)