chiark / gitweb /
Merge playlist support.
[disorder] / server / disorderd.c
index ab6221a2c79b20cb55973a9ae6180c0c38729fc6..ab88190bfd6577b57c44f8bf73df064196a03f85 100644 (file)
@@ -58,7 +58,7 @@ static int handle_sighup(ev_source attribute((unused)) *ev_,
                         int attribute((unused)) sig,
                         void attribute((unused)) *u) {
   info("received SIGHUP");
-  reconfigure(ev, 1);
+  reconfigure(ev, RECONFIGURE_RELOADING);
   return 0;
 }
 
@@ -207,7 +207,7 @@ int main(int argc, char **argv) {
   }
   info("process ID %lu", (unsigned long)getpid());
   fix_path();
-  srand(time(0));                      /* don't start the same every time */
+  srand(xtime(0));                     /* don't start the same every time */
   /* gcrypt initialization */
   if(!gcry_check_version(NULL))
     disorder_fatal(0, "gcry_check_version failed");
@@ -244,7 +244,7 @@ int main(int argc, char **argv) {
   /* make sure we're not root, whatever the config says */
   if(getuid() == 0 || geteuid() == 0) fatal(0, "do not run as root");
   /* open a lockfile - we only want one copy of the server to run at once. */
-  if(config->lock) {
+  if(1) {
     const char *lockfile;
     int lockfd;
     struct flock lock;
@@ -262,12 +262,24 @@ int main(int argc, char **argv) {
   /* initialize database environment */
   trackdb_init(TRACKDB_NORMAL_RECOVER|TRACKDB_MAY_CREATE);
   trackdb_master(ev);
-  /* install new config (calls trackdb_open()) */
-  reconfigure(ev, 0);
+  /* install new config; don't create socket */
+  if(reconfigure(ev, RECONFIGURE_FIRST))
+    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 */
   trackdb_create_root();
+  /* create sockets */
+  reset_sockets(ev);
+  /* check for change to database parameters */
+  dbparams_check();
   /* re-read config if we receive a SIGHUP */
   if(ev_signal(ev, SIGHUP, handle_sighup, 0)) fatal(0, "ev_signal failed");
   /* exit on SIGINT/SIGTERM */