aboutsummaryrefslogtreecommitdiffstats
path: root/src/directory.c
diff options
context:
space:
mode:
authorWarren Dukes <warren.dukes@gmail.com>2004-04-11 23:07:43 +0000
committerWarren Dukes <warren.dukes@gmail.com>2004-04-11 23:07:43 +0000
commitae33b348afa800447db9344cf6e5d082f1a1fcb3 (patch)
tree6e0977b81c8f9413a5513d27bd3a53cccabcf950 /src/directory.c
parent063affb04775fcf59e92df0bf70f0ecec0edf4ed (diff)
downloadmpd-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.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);