gui: Avoid busy loop if audiod is down.
authorAndre Noll <maan@systemlinux.org>
Sun, 6 Jun 2010 16:32:11 +0000 (18:32 +0200)
committerAndre Noll <maan@systemlinux.org>
Sun, 6 Jun 2010 16:32:11 +0000 (18:32 +0200)
The old approach to sleep one second is not sufficient and might still lead
to a busy loop as the call to sleep() might be interrupted by SIGCHILD.

So check the return value of sleep() and sleep again if it is not zero.

gui.c

diff --git a/gui.c b/gui.c
index fc2cd9a145d25ac5ff0197fa132a87f5492661f7..01cca6e6d08eac45ae3fbf63b999d453e40e14e3 100644 (file)
--- a/gui.c
+++ b/gui.c
@@ -880,7 +880,13 @@ static int open_audiod_pipe(void)
        if (init)
                init = 0;
        else
-               sleep(1);
+               /*
+                * Sleep a bit to avoid a busy loop. As the call to sleep() may
+                * be interrupted by SIGCHLD, we simply wait until the call
+                * succeeds.
+                */
+               while (sleep(2))
+                       ; /* nothing */
        return para_open_audiod_pipe(conf.stat_cmd_arg);
 }