X-Git-Url: https://git.distorted.org.uk/~mdw/disorder/blobdiff_plain/61b761862db3feb9bd0135a64ac3729f70917f89..8cd7d4bca92b0db48af0db692b3394ffdb789025:/lib/trackdb.c?ds=inline diff --git a/lib/trackdb.c b/lib/trackdb.c index a188caa..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")); } @@ -479,8 +488,8 @@ void trackdb_open(int flags) { trackdb_noticeddb = open_db("noticed.db", DB_DUPSORT, DB_BTREE, dbflags, 0666); trackdb_scheduledb = open_db("schedule.db", 0, DB_HASH, dbflags, 0666); - if(!trackdb_existing_database && !(flags & TRACKDB_READ_ONLY)) { trackdb_playlistsdb = open_db("playlists.db", 0, DB_HASH, dbflags, 0666); + if(!trackdb_existing_database && !(flags & TRACKDB_READ_ONLY)) { /* Stash the database version */ char buf[32]; @@ -1051,7 +1060,7 @@ int trackdb_notice_tid(const char *track, /* 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); @@ -2609,7 +2618,7 @@ static int create_user(const char *user, 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); }