Reinstall SIGCHLD handler after handling the signal.
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>
Wed, 15 Apr 2015 21:44:02 +0000 (21:44 +0000)
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>
Wed, 15 Apr 2015 21:44:02 +0000 (21:44 +0000)
This seems necessary at least on Linux, otherwise
we handle only the first child process.

git-svn-id: svn://git.mplayerhq.hu/mplayer/trunk@37387 b3059339-0415-0410-9bf9-f77b7e298cf2

mplayer.c

index 482bf53..0068b84 100644 (file)
--- a/mplayer.c
+++ b/mplayer.c
@@ -785,6 +785,9 @@ static void child_sighandler(int x)
     do {
         pid = waitpid(-1, NULL, WNOHANG);
     } while (pid > 0);
+    // Without this, we will be called only once at
+    // least on Linux 3.16.
+    signal(SIGCHLD, child_sighandler);
 }
 
 #endif
@@ -3024,6 +3027,8 @@ int main(int argc, char *argv[])
 
     // Catch signals
 #ifndef __MINGW32__
+    // TODO: use newer POSIX SIG_IGN behaviour instead to
+    // automatically handle children?
     signal(SIGCHLD, child_sighandler);
 #endif