From 36c5e137f39bc1ec10274201c9a13c04dcc86259 Mon Sep 17 00:00:00 2001 Message-Id: <36c5e137f39bc1ec10274201c9a13c04dcc86259.1714749969.git.mdw@distorted.org.uk> From: Mark Wooding Date: Sun, 12 Apr 2009 20:39:20 +0100 Subject: [PATCH 1/1] Reload now no longer cycles the database handles or reloads the queue. Both operations are pretty pointless now that we enforce a fixed home directory. This also means we'll be able to stash more useful stuff in queue structures. Organization: Straylight/Edgeware From: Richard Kettlewell --- server/disorderd.c | 10 +++++++++- server/state.c | 36 ++---------------------------------- 2 files changed, 11 insertions(+), 35 deletions(-) diff --git a/server/disorderd.c b/server/disorderd.c index ab6221a..2bf6434 100644 --- a/server/disorderd.c +++ b/server/disorderd.c @@ -263,7 +263,15 @@ int main(int argc, char **argv) { trackdb_init(TRACKDB_NORMAL_RECOVER|TRACKDB_MAY_CREATE); trackdb_master(ev); /* install new config (calls trackdb_open()) */ - reconfigure(ev, 0); + if(reconfigure(ev, 0)) + fatal(0, "failed to read configuration"); + /* Open the database */ + trackdb_open(TRACKDB_CAN_UPGRADE); + /* load the queue and recently-played list */ + queue_read(); + recent_read(); + /* Arrange timeouts for schedule actions */ + schedule_init(ev); /* pull in old users */ trackdb_old_users(); /* create a root login */ diff --git a/server/state.c b/server/state.c index 1c1e2aa..e10a230 100644 --- a/server/state.c +++ b/server/state.c @@ -159,10 +159,8 @@ int reconfigure(ev_source *ev, int reload) { } if(reload) { /* If there's a rescan in progress, cancel it but remember to start a fresh - * one after the reload */ + * one after the reload. */ need_another_rescan = trackdb_rescan_cancel(); - /* Close the track database */ - trackdb_close(); /* (Re-)read the configuration */ if(config_read(1/*server*/, config)) ret = -1; @@ -171,12 +169,7 @@ int reconfigure(ev_source *ev, int reload) { speaker_reload(); info("%s: installed new configuration", configfile); } - /* Re-open track database. We don't attempt to support database version - * upgrade at this point - the software hasn't changed, after all. */ - trackdb_open(TRACKDB_NO_UPGRADE); - } else - /* We only allow for upgrade at startup */ - trackdb_open(TRACKDB_CAN_UPGRADE); + } /* New audio API */ api = uaudio_find(config->api); if(api->configure) @@ -186,35 +179,10 @@ int reconfigure(ev_source *ev, int reload) { /* If we interrupted a rescan of all the tracks, start a new one */ if(need_another_rescan) trackdb_rescan(ev, 1/*check*/, 0, 0); - /* Arrange timeouts for schedule actions */ - schedule_init(ev); - /* TODO what about leftover callbacks from before the reload? */ if(!ret) { - /* Read the queue back in */ - queue_read(); - recent_read(); /* Reset sockets */ reset_socket(ev); } - /* TODO we need a careful think about what you can and cannot change with a - * reload. - * - * For instance saving and restoring the queue limits what we can usefuly - * keep in the queue data structure. As a general rule, long-term state - * ought to be off-limits. So 'home directory' will have to stay where it - * is. (This actually means the AF_UNIX socket will never be re-opened.) - * - * Players certainly ought to be reconfigurable but this raises the ugly - * question of what to do about already-started background decoders. - * - * The audio API is easy to do for the server but a pain for the speaker. - * - * These two points suggest a general approach: if things that affect the - * speaker change, we could just restart it and any extant background - * decoders, at the next track change. This would generate a bit of a gap - * but presumably reconfiguration is a rare event so this might be - * acceptable. - */ return ret; } -- [mdw]