]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
Merge branch 'refs/heads/t/com_sender'
authorAndre Noll <maan@tuebingen.mpg.de>
Sun, 6 Mar 2016 20:36:21 +0000 (21:36 +0100)
committerAndre Noll <maan@tuebingen.mpg.de>
Sun, 6 Mar 2016 20:36:21 +0000 (21:36 +0100)
A single commit which was cooking in next for several months.

* refs/heads/t/com_sender:
  Avoid duplication of sender subcommands.

1  2 
command.c
udp_send.c

diff --combined command.c
index bde1458776856d26be371da2e309fb21354c5078,3ab34daab035551ab8376e99f1533d6ee974af6c..93de2d2d99d9f75cb041211e8c4f45dfef28c6a1
+++ b/command.c
@@@ -75,14 -75,20 +75,14 @@@ 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 string containing vss status for given integer value.
 + * Compute human readable vss status text.
   *
 - * We don't want to use vss_playing() and friends here because we take a
 - * snapshot of the mmd struct and use the copy for computing the state of the
 - * vss. If the real data were used, we would take the mmd lock for a rather
 - * long time or risk to get an inconsistent view.
 + * We can't call vss_playing() and friends here because those functions read
 + * the flags from the primary mmd structure, so calling them from command
 + * handler context would require to take the mmd lock. At the time the function
 + * is called we already took a copy of the mmd structure and want to use the
 + * flags value of the copy for computing the vss status text.
   */
  static char *vss_status_tohuman(unsigned int flags)
  {
@@@ -161,9 -167,8 +161,8 @@@ static unsigned get_status(struct misc_
  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;
        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);
@@@ -358,8 -363,8 +357,8 @@@ static int com_sender(struct command_co
        }
  
        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)
@@@ -526,13 -531,7 +525,13 @@@ static int com_stat(struct command_cont
        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)
diff --combined udp_send.c
index faae208c2d6d9142760d93d2d7033b2b53e9e95f,9d9ddfa526faed642c7e375c50ae23356e01edc8..bbc38f0117d796ac5211bf86821244daf17baf84
@@@ -156,6 -156,11 +156,6 @@@ err
        return -ERRNO_TO_PARA_ERROR(errno);
  }
  
 -static void udp_init_session(struct sender_client *sc)
 -{
 -      PARA_NOTICE_LOG("sending to udp %s\n", sc->name);
 -}
 -
  static void udp_shutdown_targets(void)
  {
        struct sender_client *sc, *tmp;
@@@ -187,14 -192,14 +187,14 @@@ static int udp_resolve_target(const cha
  
  static int udp_com_on(__a_unused struct sender_command_data *scd)
  {
-       sender_status = SENDER_ON;
+       sender_status = SENDER_on;
        return 1;
  }
  
  static int udp_com_off(__a_unused struct sender_command_data *scd)
  {
        udp_shutdown_targets();
-       sender_status = SENDER_OFF;
+       sender_status = SENDER_off;
        return 1;
  }
  
@@@ -234,7 -239,7 +234,7 @@@ static int udp_init_fec(struct sender_c
  {
        int mps;
  
 -      udp_init_session(sc);
 +      PARA_NOTICE_LOG("sending to udp %s\n", sc->name);
        mps = generic_max_transport_msg_size(sc->fd) - sizeof(struct udphdr);
        PARA_INFO_LOG("current MPS = %d bytes\n", mps);
        return mps;
@@@ -277,7 -282,7 +277,7 @@@ static void udp_send_fec(struct sender_
  {
        int ret;
  
-       if (sender_status == SENDER_OFF)
+       if (sender_status == SENDER_off)
                return;
        if (len == 0)
                return;
@@@ -366,7 -371,7 +366,7 @@@ static char *udp_status(void
                "status: %s\n"
                "port: %s\n"
                "targets: %s\n",
-               (sender_status == SENDER_ON)? "on" : "off",
+               (sender_status == SENDER_on)? "on" : "off",
                stringify_port(conf.udp_default_port_arg, "udp"),
                tgts? tgts : "(none)"
        );
@@@ -425,15 -430,15 +425,15 @@@ void udp_send_init(struct sender *s
        s->post_select = NULL;
        s->shutdown_clients = udp_shutdown_targets;
        s->resolve_target = udp_resolve_target;
-       s->client_cmds[SENDER_ON] = udp_com_on;
-       s->client_cmds[SENDER_OFF] = udp_com_off;
-       s->client_cmds[SENDER_DENY] = NULL;
-       s->client_cmds[SENDER_ALLOW] = NULL;
-       s->client_cmds[SENDER_ADD] = udp_com_add;
-       s->client_cmds[SENDER_DELETE] = udp_com_delete;
-       sender_status = SENDER_OFF;
+       s->client_cmds[SENDER_on] = udp_com_on;
+       s->client_cmds[SENDER_off] = udp_com_off;
+       s->client_cmds[SENDER_deny] = NULL;
+       s->client_cmds[SENDER_allow] = NULL;
+       s->client_cmds[SENDER_add] = udp_com_add;
+       s->client_cmds[SENDER_delete] = udp_com_delete;
+       sender_status = SENDER_off;
        udp_init_target_list();
        if (!conf.udp_no_autostart_given)
-               sender_status = SENDER_ON;
+               sender_status = SENDER_on;
        PARA_DEBUG_LOG("udp sender init complete\n");
  }