diff options
author | Warren Dukes <warren.dukes@gmail.com> | 2004-04-11 23:07:43 +0000 |
---|---|---|
committer | Warren Dukes <warren.dukes@gmail.com> | 2004-04-11 23:07:43 +0000 |
commit | ae33b348afa800447db9344cf6e5d082f1a1fcb3 (patch) | |
tree | 6e0977b81c8f9413a5513d27bd3a53cccabcf950 /src/directory.c | |
parent | 063affb04775fcf59e92df0bf70f0ecec0edf4ed (diff) | |
download | mpd-ae33b348afa800447db9344cf6e5d082f1a1fcb3.tar.gz mpd-ae33b348afa800447db9344cf6e5d082f1a1fcb3.tar.xz mpd-ae33b348afa800447db9344cf6e5d082f1a1fcb3.zip |
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
Diffstat (limited to 'src/directory.c')
-rw-r--r-- | src/directory.c | 21 |
1 files changed, 11 insertions, 10 deletions
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); |