From: Andre Noll Date: Mon, 7 Aug 2017 18:33:55 +0000 (+0200) Subject: server: Move afs_pid out of mmd struct. X-Git-Tag: v0.6.2~52 X-Git-Url: http://git.tue.mpg.de/?a=commitdiff_plain;h=e32a0e7295c6386b421956553ae577a7df1abf8e;p=paraslash.git server: Move afs_pid out of mmd struct. The afs_pid variable is read-only after it has been initialized. Hence it does not qualify for being part of the shared memory area which contains the mmd struct. Make it a global variable instead. --- diff --git a/command.c b/command.c index 9d572317..43f462fd 100644 --- a/command.c +++ b/command.c @@ -394,7 +394,7 @@ static int com_si(struct command_context *cc, "supported audio formats: %s\n", ut, mmd->num_played, (int)getppid(), - (int)mmd->afs_pid, + (int)afs_pid, mmd->active_connections, mmd->num_commands, mmd->num_connects, diff --git a/server.c b/server.c index c9605d2f..2018b8ee 100644 --- a/server.c +++ b/server.c @@ -95,6 +95,9 @@ int mmd_mutex; static struct sched sched; static struct signal_task *signal_task; +/** The process id of the audio file selector process. */ +pid_t afs_pid = 0; + /** The task responsible for server command handling. */ struct server_command_task { /** TCP port on which para_server listens for connections. */ @@ -179,7 +182,7 @@ void parse_config_or_die(bool reload) cf = para_strdup(OPT_STRING_VAL(CONFIG_FILE)); else cf = make_message("%s/.paraslash/server.conf", home); - if (!mmd || getpid() != mmd->afs_pid) { + if (!mmd || getpid() != afs_pid) { if (OPT_GIVEN(USER_LIST)) user_list_file = para_strdup(OPT_STRING_VAL(USER_LIST)); else @@ -258,8 +261,8 @@ static void handle_sighup(void) PARA_NOTICE_LOG("SIGHUP\n"); parse_config_or_die(true); - if (mmd->afs_pid) - kill(mmd->afs_pid, SIGHUP); + if (afs_pid != 0) + kill(afs_pid, SIGHUP); } static int signal_post_select(struct sched *s, __a_unused void *context) @@ -278,7 +281,7 @@ static int signal_post_select(struct sched *s, __a_unused void *context) int ret = para_reap_child(&pid); if (ret <= 0) break; - if (pid != mmd->afs_pid) + if (pid != afs_pid) continue; PARA_EMERG_LOG("fatal: afs died\n"); kill(0, SIGTERM); @@ -304,8 +307,8 @@ static int signal_post_select(struct sched *s, __a_unused void *context) * processes get killed immediately by the above kill(). */ PARA_INFO_LOG("waiting for afs (pid %d) to die\n", - (int)mmd->afs_pid); - waitpid(mmd->afs_pid, NULL, 0); + (int)afs_pid); + waitpid(afs_pid, NULL, 0); cleanup: free(mmd->afd.afhi.chunk_table); close_listed_fds(); @@ -432,7 +435,6 @@ err: static int init_afs(int argc, char **argv) { int ret, afs_server_socket[2]; - pid_t afs_pid; char c; ret = socketpair(PF_UNIX, SOCK_STREAM, 0, afs_server_socket); @@ -446,6 +448,7 @@ static int init_afs(int argc, char **argv) if (afs_pid == 0) { /* child (afs) */ int i; + afs_pid = getpid(); for (i = argc - 1; i >= 0; i--) memset(argv[i], 0, strlen(argv[i])); i = argc - lls_num_inputs(cmdline_lpr) - 1; @@ -453,7 +456,6 @@ static int init_afs(int argc, char **argv) close(afs_server_socket[0]); afs_init(afs_socket_cookie, afs_server_socket[1]); } - mmd->afs_pid = afs_pid; close(afs_server_socket[1]); if (read(afs_server_socket[0], &c, 1) <= 0) { PARA_EMERG_LOG("early afs exit\n"); diff --git a/server.h b/server.h index 23feadd1..1852dd50 100644 --- a/server.h +++ b/server.h @@ -73,8 +73,6 @@ struct misc_meta_data { unsigned int num_connects; /** The number of connections currently active. */ unsigned int active_connections; - /** The process id of the audio file selector. */ - pid_t afs_pid; /** This gets updated by afs and contains its current mode. */ char afs_mode_string[MAXLINE]; /** Used by the sender command. */ @@ -83,6 +81,7 @@ struct misc_meta_data { struct audio_file_data afd; }; +extern pid_t afs_pid; extern struct lls_parse_result *server_lpr; /**