From 110300b44e6d19f2c185d875e00fe86d9417e64a Mon Sep 17 00:00:00 2001 From: Justin Maggard Date: Thu, 17 May 2012 07:49:24 +0000 Subject: [PATCH] * Listen for SIGCHLD while scanning, so we can immediately add inotify watches after a scan. --- minidlna.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/minidlna.c b/minidlna.c index aa0eba1..87ec22e 100644 --- a/minidlna.c +++ b/minidlna.c @@ -53,6 +53,7 @@ #include #include #include +#include #include #include #include @@ -158,6 +159,14 @@ sigterm(int sig) /*errno = save_errno;*/ } +static void +sigchld(int sig) +{ + if (!scanning) + signal(SIGCHLD, SIG_IGN); + waitpid(-1, NULL, WNOHANG); +} + /* record the startup time */ static void set_startup_time(void) @@ -971,7 +980,7 @@ main(int argc, char * * argv) start_scanner(); #endif } - signal(SIGCHLD, SIG_IGN); + signal(SIGCHLD, &sigchld); #ifdef HAVE_INOTIFY if( sqlite3_threadsafe() && sqlite3_libversion_number() >= 3005001 && GETFLAG(INOTIFY_MASK) && pthread_create(&inotify_thread, NULL, start_inotify, NULL) ) @@ -1149,6 +1158,7 @@ main(int argc, char * * argv) if(select(max_fd+1, &readset, &writeset, 0, &timeout) < 0) { if(quitting) goto shutdown; + if(errno == EINTR) continue; DPRINTF(E_ERROR, L_GENERAL, "select(all): %s\n", strerror(errno)); DPRINTF(E_FATAL, L_GENERAL, "Failed to select open sockets. EXITING\n"); }