]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - server.c
Improve memory mapping.
[paraslash.git] / server.c
index 96a40f3388b02aff06d478268dca7ef9ff667c42..436e72af9c7c5b86eadb217d194fb44cf74db5ed 100644 (file)
--- a/server.c
+++ b/server.c
@@ -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 */