diff options
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); |