aboutsummaryrefslogtreecommitdiffstats
path: root/src/directory.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/directory.c')
-rw-r--r--src/directory.c21
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);