X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=server.c;h=f19fc996ecc7355ddf24379e242fcec4da287dd6;hp=690f7163984c2f00cb0de1e4982da4668676e500;hb=e2167286448ce2ed9a01a548e7e9832563035088;hpb=ced0c17d1a3ee0336dc7b35e69faff131dabecac diff --git a/server.c b/server.c index 690f7163..f19fc996 100644 --- a/server.c +++ b/server.c @@ -45,6 +45,7 @@ #include "afh.h" #include "string.h" #include "afs.h" +#include "net.h" #include "server.h" #include "list.h" #include "send.h" @@ -52,7 +53,6 @@ #include "vss.h" #include "config.h" #include "close_on_fork.h" -#include "net.h" #include "daemon.h" #include "ipc.h" #include "fd.h" @@ -283,7 +283,7 @@ success: daemon_set_flag(DF_LOG_TIMING); daemon_set_priority(OPT_UINT32_VAL(PRIORITY)); if (user_list_file) - init_user_list(user_list_file); + user_list_init(user_list_file); ret = 1; free_cf: free(cf); @@ -505,6 +505,8 @@ static int init_afs(int argc, char **argv) int i; afs_pid = getpid(); + crypt_shutdown(); + user_list_deplete(); for (i = argc - 1; i >= 0; i--) memset(argv[i], 0, strlen(argv[i])); i = argc - lls_num_inputs(cmdline_lpr) - 1; @@ -563,7 +565,7 @@ static void server_init(int argc, char **argv, struct server_command_task *sct) if (OPT_GIVEN(DAEMON)) daemon_pipe = daemonize(true /* parent waits for SIGTERM */); server_pid = getpid(); - init_random_seed_or_die(); + crypt_init(); daemon_log_welcome("server"); init_ipc_or_die(); /* init mmd struct, mmd and log mutex */ daemon_set_start_time(); @@ -642,6 +644,21 @@ static int server_select(int max_fileno, fd_set *readfds, fd_set *writefds, return ret; } +/** + * Deallocate all lopsub parse results. + * + * The server allocates a parse result for command line options and optionally + * a second parse result for the effective configuration, defined by merging + * the command line options with the options stored in the configuration file. + * This function frees both structures. + */ +void free_lpr(void) +{ + lls_free_parse_result(server_lpr, CMD_PTR); + if (server_lpr != cmdline_lpr) + lls_free_parse_result(cmdline_lpr, CMD_PTR); +} + /** * The main function of para_server. * @@ -668,12 +685,13 @@ int main(int argc, char *argv[]) */ mutex_unlock(mmd_mutex); sched_shutdown(&sched); + crypt_shutdown(); signal_shutdown(signal_task); if (!process_is_command_handler()) { /* parent (server) */ mutex_destroy(mmd_mutex); daemon_set_hooks(NULL, NULL); /* only one process remaining */ mutex_destroy(log_mutex); - shm_detach(mmd); + deplete_close_on_fork_list(); if (ret < 0) PARA_EMERG_LOG("%s\n", para_strerror(-ret)); } else { @@ -683,8 +701,7 @@ int main(int argc, char *argv[]) } vss_shutdown(); shm_detach(mmd); - lls_free_parse_result(server_lpr, CMD_PTR); - if (server_lpr != cmdline_lpr) - lls_free_parse_result(cmdline_lpr, CMD_PTR); + user_list_deplete(); + free_lpr(); exit(ret < 0? EXIT_FAILURE : EXIT_SUCCESS); }