/*
* This file is part of DisOrder
- * Copyright (C) 2005, 2006, 2007 Richard Kettlewell
+ * Copyright (C) 2005-2008 Richard Kettlewell
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
if((err = trackdb_env->close(trackdb_env, 0)))
fatal(0, "trackdb_env->close: %s", db_strerror(err));
- if(rescan_pid != -1 && kill(rescan_pid, SIGTERM) < 0)
- fatal(errno, "error killing rescanner");
+ if(rescan_pid != -1) {
+ /* shut down the rescanner */
+ if(kill(rescan_pid, SIGTERM) < 0)
+ fatal(errno, "error killing rescanner");
+ /* wait for the rescanner to finish */
+ while(waitpid(rescan_pid, &err, 0) == -1 && errno == EINTR)
+ ;
+ }
+
+ /* TODO kill any stats subprocesses */
- /* terminate the deadlock manager */
+ /* 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;
trackdb_existing_database = 0;
}
/* open the databases */
+ if(!(trackdb_usersdb = open_db("users.db",
+ 0, DB_HASH, dbflags, 0600)))
+ fatal(0, "cannot open users.db");
trackdb_tracksdb = open_db("tracks.db",
DB_RECNUM, DB_BTREE, dbflags, 0666);
trackdb_searchdb = open_db("search.db",
trackdb_globaldb = open_db("global.db", 0, DB_HASH, dbflags, 0666);
trackdb_noticeddb = open_db("noticed.db",
DB_DUPSORT, DB_BTREE, dbflags, 0666);
- trackdb_usersdb = open_db("users.db",
- 0, DB_HASH, dbflags, 0600);
if(!trackdb_existing_database) {
/* Stash the database version */
char buf[32];
/** @brief Initiate a rescan
* @param ev Event loop or 0 to block
- * @param check 1 to recheck lengths, 0 to suppress check
+ * @param recheck 1 to recheck lengths, 0 to suppress check
*/
-void trackdb_rescan(ev_source *ev, int check) {
+void trackdb_rescan(ev_source *ev, int recheck) {
int w;
if(rescan_pid != -1) {
return;
}
rescan_pid = subprogram(ev, -1, RESCAN,
- check ? "--check" : "--no-check",
+ recheck ? "--check" : "--no-check",
(char *)0);
if(ev) {
ev_child(ev, rescan_pid, 0, reap_rescan, 0);