diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 77ddbaf8..9fdb083c 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1497,6 +1497,7 @@ Udo Richter up at a particular time for making the HUP signal force a restart of VDR for fixing a race condition with signal handlers at program exit + for fixing handling detached processes in SystemExec() Sven Kreiensen for his help in keeping 'channels.conf.terr' up to date diff --git a/HISTORY b/HISTORY index 14db3b7a..ef821290 100644 --- a/HISTORY +++ b/HISTORY @@ -5251,3 +5251,4 @@ Video Disk Recorder Revision History - Updated the Finnish OSD texts (thanks to Rolf Ahrenberg). - Changed the parameter "OSD font" to "Default font" in "Setup/OSD" (suggested by Rolf Ahrenberg). +- Fixed handling detached processes in SystemExec() (thanks to Udo Richter). diff --git a/thread.c b/thread.c index 8882252a..4eb64f1e 100644 --- a/thread.c +++ b/thread.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: thread.c 1.60 2007/02/24 16:13:33 kls Exp $ + * $Id: thread.c 1.61 2007/06/17 12:43:40 kls Exp $ */ #include "thread.h" @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -507,7 +508,7 @@ int SystemExec(const char *Command, bool Detached) if (pid > 0) { // parent process int status = 0; - if (!Detached && waitpid(pid, &status, 0) < 0) { + if (waitpid(pid, &status, 0) < 0) { LOG_ERROR; return -1; } @@ -515,6 +516,9 @@ int SystemExec(const char *Command, bool Detached) } else { // child process if (Detached) { + // Fork again and let first child die - grandchild stays alive without parent + if (fork() > 0) + exit(0); // Start a new session pid_t sid = setsid(); if (sid < 0)