X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=command.c;h=93de2d2d99d9f75cb041211e8c4f45dfef28c6a1;hp=46ede2fe825a9c10c86f59dd6c4e2f244d653468;hb=c998e827328c7989986e4fb91048e7f427f722a8;hpb=b85ea5b925b31e2aeddf6c69d8ae8a89f8038c78 diff --git a/command.c b/command.c index 46ede2fe..93de2d2d 100644 --- a/command.c +++ b/command.c @@ -75,13 +75,6 @@ static void dummy(__a_unused int s) { } -static void mmd_dup(struct misc_meta_data *new_mmd) -{ - mutex_lock(mmd_mutex); - *new_mmd = *mmd; - mutex_unlock(mmd_mutex); -} - /* * Compute human readable vss status text. * @@ -168,9 +161,8 @@ static unsigned get_status(struct misc_meta_data *nmmd, int parser_friendly, static int check_sender_args(int argc, char * const * argv, struct sender_command_data *scd) { int i; - /* this has to match sender.h */ - const char *subcmds[] = {"add", "delete", "allow", "deny", "on", "off", NULL}; + const char *subcmds[] = {SENDER_SUBCOMMANDS NULL}; scd->sender_num = -1; if (argc < 3) return -E_COMMAND_SYNTAX; @@ -190,19 +182,19 @@ static int check_sender_args(int argc, char * const * argv, struct sender_comman if (!senders[scd->sender_num].client_cmds[scd->cmd_num]) return -E_SENDER_CMD; switch (scd->cmd_num) { - case SENDER_ON: - case SENDER_OFF: + case SENDER_on: + case SENDER_off: if (argc != 3) return -E_COMMAND_SYNTAX; break; - case SENDER_DENY: - case SENDER_ALLOW: + case SENDER_deny: + case SENDER_allow: if (argc != 4 || parse_cidr(argv[3], scd->host, sizeof(scd->host), &scd->netmask) == NULL) return -E_COMMAND_SYNTAX; break; - case SENDER_ADD: - case SENDER_DELETE: + case SENDER_add: + case SENDER_delete: if (argc != 4) return -E_COMMAND_SYNTAX; return parse_fec_url(argv[3], scd); @@ -365,8 +357,8 @@ static int com_sender(struct command_context *cc) } switch (scd.cmd_num) { - case SENDER_ADD: - case SENDER_DELETE: + case SENDER_add: + case SENDER_delete: assert(senders[scd.sender_num].resolve_target); ret = senders[scd.sender_num].resolve_target(cc->argv[3], &scd); if (ret < 0) @@ -533,7 +525,13 @@ static int com_stat(struct command_context *cc) if (i != cc->argc) return -E_COMMAND_SYNTAX; for (;;) { - mmd_dup(nmmd); + /* + * Copy the mmd structure to minimize the time we hold the mmd + * lock. + */ + mutex_lock(mmd_mutex); + *nmmd = *mmd; + mutex_unlock(mmd_mutex); ret = get_status(nmmd, parser_friendly, &s); ret = send_sb(&cc->scc, s, ret, SBD_OUTPUT, false); if (ret < 0)