int attribute((unused)) sig,
void attribute((unused)) *u) {
info("received SIGHUP");
- reconfigure(ev, 1);
+ reconfigure(ev, RECONFIGURE_RELOADING);
return 0;
}
}
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");
if(ev_child_setup(ev)) fatal(0, "ev_child_setup failed");
/* read config */
config_uaudio_apis = uaudio_apis;
- if(config_read(1))
+ if(config_read(1, NULL))
fatal(0, "cannot read configuration");
/* make sure the home directory exists and has suitable permissions */
make_home();
/* 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;
/* 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 */