X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/6ac9a215b792ec1954b2b69b310f209be7968f05..8cd7d4bca92b0db48af0db692b3394ffdb789025:/lib/trackdb.c diff --git a/lib/trackdb.c b/lib/trackdb.c index d724472..c82bf10 100644 --- a/lib/trackdb.c +++ b/lib/trackdb.c @@ -325,7 +325,7 @@ void trackdb_master(ev_source *ev) { } /* close environment */ -void trackdb_deinit(void) { +void trackdb_deinit(ev_source *ev) { int err; /* sanity checks */ @@ -343,14 +343,23 @@ void trackdb_deinit(void) { /* wait for the rescanner to finish */ while(waitpid(rescan_pid, &err, 0) == -1 && errno == EINTR) ; + if(ev) + ev_child_cancel(ev, rescan_pid); + rescan_pid = -1; } /* TODO kill any stats subprocesses */ - /* finally terminate the deadlock manager */ - if(db_deadlock_pid != -1 && kill(db_deadlock_pid, SIGTERM) < 0) - fatal(errno, "error killing deadlock manager"); - db_deadlock_pid = -1; + if(db_deadlock_pid != -1) { + /* shut down the deadlock manager */ + if(kill(db_deadlock_pid, SIGTERM) < 0) + fatal(errno, "error killing deadlock manager"); + while(waitpid(db_deadlock_pid, &err, 0) == -1 && errno == EINTR) + ; + if(ev) + ev_child_cancel(ev, db_deadlock_pid); + db_deadlock_pid = -1; + } D(("deinitialized database environment")); }