]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - server.c
Improve memory mapping.
[paraslash.git] / server.c
index 0924ace4b07eac452a193df49c4b48bf6c8562aa..436e72af9c7c5b86eadb217d194fb44cf74db5ed 100644 (file)
--- a/server.c
+++ b/server.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1997-2008 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1997-2009 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -27,7 +27,7 @@
  *     - Volume normalizer: \ref compress_filter.c,
  *     - Output: \ref alsa_write.c, \ref osx_write.c,
  *     - http: \ref http_recv.c, \ref http_send.c,
- *     - ortp: \ref ortp_recv.c, \ref ortp_send.c,
+ *     - udp: \ref udp_recv.c, \ref udp_send.c,
  *     - dccp: \ref dccp_recv.c, \ref dccp_send.c,
  *     - Audio file selector: \ref afs.c, \ref aft.c, \ref mood.c,
  *     - Afs structures: \ref afs_table, \ref audio_file_data,
@@ -64,6 +64,7 @@
 
 #include <signal.h>
 #include <dirent.h>
+#include <sys/time.h>
 
 #include "para.h"
 #include "error.h"
@@ -165,7 +166,7 @@ __printf_2_3 void para_log(int ll, const char* fmt,...)
 /*
  * setup shared memory area and get mutex for locking
  */
-static void shm_init(void)
+static void init_ipc_or_die(void)
 {
        void *shm;
        int ret = shm_new(sizeof(struct misc_meta_data));
@@ -197,13 +198,15 @@ err_out:
        exit(EXIT_FAILURE);
 }
 
-static void parse_config(int override)
+void parse_config_or_die(int override)
 {
        char *home = para_homedir();
        struct stat statbuf;
        int ret;
        char *cf;
 
+       close_log(logfile);
+       logfile = NULL;
        if (conf.config_file_given)
                cf = para_strdup(conf.config_file_arg);
        else
@@ -256,9 +259,7 @@ static void signal_pre_select(struct sched *s, struct task *t)
 static void handle_sighup(void)
 {
        PARA_NOTICE_LOG("SIGHUP\n");
-       close_log(logfile); /* gets reopened if necessary by parse_config */
-       logfile = NULL;
-       parse_config(1); /* reopens log */
+       parse_config_or_die(1); /* reopens log */
        init_user_list(user_list_file); /* reload user list */
        if (mmd->afs_pid)
                kill(mmd->afs_pid, SIGHUP);
@@ -481,11 +482,13 @@ static void server_init(int argc, char **argv)
        /* parse command line options */
        server_cmdline_parser_ext(argc, argv, &conf, &params);
        HANDLE_VERSION_FLAG("server", conf);
-       para_drop_privileges(conf.user_arg, conf.group_arg);
+       drop_privileges_or_die(conf.user_arg, conf.group_arg);
        /* parse config file, open log and set defaults */
-       parse_config(0);
+       parse_config_or_die(0);
        log_welcome("para_server", conf.loglevel_arg);
-       shm_init(); /* init mmd struct */
+       init_ipc_or_die(); /* init mmd struct and mmd->lock */
+       /* make sure, the global now pointer is uptodate */
+       gettimeofday(now, NULL);
        server_uptime(UPTIME_SET); /* reset server uptime */
        init_user_list(user_list_file);
        /* become daemon */