}
/* close environment */
-void trackdb_deinit(void) {
+void trackdb_deinit(ev_source *ev) {
int err;
/* sanity checks */
/* 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"));
}
#define TRACKDB_READ_ONLY 0x0020
void trackdb_init(int flags);
-void trackdb_deinit(void);
+void trackdb_deinit(ev_source *ev);
/* close/close environment */
void trackdb_master(struct ev_source *ev);
}
trackdb_commit_transaction(global_tid);
trackdb_close();
- trackdb_deinit();
+ trackdb_deinit(NULL);
D(("ntracks=%ld total_weight=%lld", ntracks, total_weight));
if(!total_weight)
fatal(0, "no tracks match random choice criteria");