X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/fc9c24e3ebb095d05e2d140526289c622d6e5504..1a4a6350a9033f0c2d1e2b7e6c1a029bdaa46da6:/server/trackdb.c diff --git a/server/trackdb.c b/server/trackdb.c index 8cfd71f..57ebb68 100644 --- a/server/trackdb.c +++ b/server/trackdb.c @@ -34,6 +34,7 @@ #include #include #include +#include #include "event.h" #include "mem.h" @@ -1826,14 +1827,21 @@ static int reap_rescan(ev_source attribute((unused)) *ev, } void trackdb_rescan(ev_source *ev) { + int w; if(rescan_pid != -1) { error(0, "rescan already underway"); return; } rescan_pid = subprogram(ev, RESCAN, -1); - ev_child(ev, rescan_pid, 0, reap_rescan, 0); - D(("started rescanner")); - + if(ev) { + ev_child(ev, rescan_pid, 0, reap_rescan, 0); + D(("started rescanner")); + } else { + /* This is the first rescan, we block until it is complete */ + while(waitpid(rescan_pid, &w, 0) < 0 && errno == EINTR) + ; + reap_rescan(0, rescan_pid, w, 0, 0); + } } int trackdb_rescan_cancel(void) {