From ae33b348afa800447db9344cf6e5d082f1a1fcb3 Mon Sep 17 00:00:00 2001 From: Warren Dukes Date: Sun, 11 Apr 2004 23:07:43 +0000 Subject: clean up signal handling using a polling method, from the genius that is mackstann git-svn-id: https://svn.musicpd.org/mpd/trunk@697 09075e82-0dd4-0310-85a5-a0d7c8717e4f --- src/directory.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'src/directory.c') diff --git a/src/directory.c b/src/directory.c index a595c061b..54fe2d6cb 100644 --- a/src/directory.c +++ b/src/directory.c @@ -74,6 +74,8 @@ char directorydb[MAXPATHLEN+1]; int directory_updatePid = 0; +int directory_reReadDB = 0; + mpd_uint16 directory_updateJobId = 0; DirectoryList * newDirectoryList(); @@ -112,16 +114,22 @@ void directory_sigChldHandler(int pid, int status) { WTERMSIG(status)); } else if(WEXITSTATUS(status)==EXIT_SUCCESS) { - readDirectoryDB(); - incrPlaylistVersion(); DEBUG("direcotry_sigChldHandler: " "updated db succesffully\n"); + directory_reReadDB = 1; } - else ERROR("problems updating db\n"); directory_updatePid = 0; } } +void readDirectoryDBIfUpdateIsFinished() { + if(directory_reReadDB && 0==directory_updatePid) { + DEBUG("readDirectoryDB since update finished successfully\n"); + readDirectoryDB(); + directory_reReadDB = 0; + } +} + int updateInit(FILE * fp, List * pathList) { if(directory_updatePid > 0) { myfprintf(fp,"%s already updating\n",COMMAND_RESPOND_ERROR); @@ -135,13 +143,6 @@ int updateInit(FILE * fp, List * pathList) { if(directory_updatePid==0) { unblockSignals(); /* child */ - struct sigaction sa; - sa.sa_flags = 0; - sigemptyset(&sa.sa_mask); - - sa.sa_handler = SIG_IGN; - sigaction(SIGPIPE,&sa,NULL); - sigaction(SIGCHLD,&sa,NULL); finishSigHandlers(); close(listenSocket); -- cgit v1.2.3