X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/37f29ce96baac1d999dab119d671bb7dff6793e8..b60ceb3caecce2c86c484e6173fb1428b71d456a:/server/state.c diff --git a/server/state.c b/server/state.c index bd74b14..b125417 100644 --- a/server/state.c +++ b/server/state.c @@ -46,11 +46,27 @@ const struct uaudio *api; /** @brief Quit DisOrder */ void quit(ev_source *ev) { - info("shutting down..."); + disorder_info("shutting down..."); quitting(ev); trackdb_close(); - trackdb_deinit(); - info("exiting"); + trackdb_deinit(ev); + /* Shutdown subprocesses. + * + * Subprocesses that use ev_child: + * - the speaker + * - the current rescan + * - any decoders + * - ...and players + * - the track picker + * - mail sender + * - the deadlock manager + * + * Subprocesses that don't: + * - any normalizers + * These are not shut down currently. + */ + ev_child_killall(ev); + disorder_info("exiting"); exit(0); } @@ -76,22 +92,22 @@ void reset_sockets(ev_source *ev) { /* stop the old one and remove it from the filesystem */ server_stop(ev, current_unix_fd); if(unlink(current_unix) < 0) - fatal(errno, "unlink %s", current_unix); + disorder_fatal(errno, "unlink %s", current_unix); } /* start the new one */ if(strlen(new_unix) >= sizeof sun.sun_path) - fatal(0, "socket path %s is too long", new_unix); + disorder_fatal(0, "socket path %s is too long", new_unix); memset(&sun, 0, sizeof sun); sun.sun_family = AF_UNIX; strcpy(sun.sun_path, new_unix); if(unlink(new_unix) < 0 && errno != ENOENT) - fatal(errno, "unlink %s", new_unix); + disorder_fatal(errno, "unlink %s", new_unix); if((current_unix_fd = server_start(ev, PF_UNIX, sizeof sun, (const struct sockaddr *)&sun, new_unix)) >= 0) { current_unix = new_unix; if(chmod(new_unix, 0777) < 0) - fatal(errno, "error calling chmod %s", new_unix); + disorder_fatal(errno, "error calling chmod %s", new_unix); } else current_unix = 0; } @@ -144,6 +160,7 @@ void reset_sockets(ev_source *ev) { } /** @brief Reconfigure the server + * @param ev Event loop * @param flags Flags * @return As config_read(); 0 on success, -1 if could not (re-)read config */ @@ -168,7 +185,7 @@ int reconfigure(ev_source *ev, unsigned flags) { else { /* Tell the speaker it needs to reload its config too. */ speaker_reload(); - info("%s: installed new configuration", configfile); + disorder_info("%s: installed new configuration", configfile); } } /* New audio API */