}
/* 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"));
}
/* this is a real track */
t_changed += kvp_set(&t, "_alias_for", 0);
t_changed += kvp_set(&t, "_path", path);
- time(&now);
+ xtime(&now);
if(ret == DB_NOTFOUND) {
/* It's a new track; record the time */
byte_xasprintf(¬iced, "%lld", (long long)now);
kvp_set(&k, "email", email);
if(confirmation)
kvp_set(&k, "confirmation", confirmation);
- snprintf(s, sizeof s, "%jd", (intmax_t)time(0));
+ snprintf(s, sizeof s, "%jd", (intmax_t)xtime(0));
kvp_set(&k, "created", s);
return trackdb_putdata(trackdb_usersdb, user, k, tid, flags);
}