]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
udp_send: Add/remove the udp socket fd only once.
authorAndre Noll <maan@systemlinux.org>
Wed, 6 Oct 2010 20:56:23 +0000 (22:56 +0200)
committerAndre Noll <maan@systemlinux.org>
Sun, 31 Oct 2010 11:18:24 +0000 (12:18 +0100)
Currently, we remove this fd from the close-on-fork list in
udp_close_target() and re-add it in udp_init_session(). This is wrong
because we want the fd being closed in the command handlers also if
the child process for the command is spawned while the udp sender
is inactive.

So add/delete the fd when the udp target is added/removed rather than
on a per session basis.

udp_send.c

index 4957725d5365b8da71cc2016b95633967000be2c..ba7163a8dcdbcffcc9f60772a7d34c5f3c0aec28 100644 (file)
@@ -57,7 +57,6 @@ static int sender_status;
 static void udp_close_target(struct sender_client *sc)
 {
        if (sc->cq != NULL) {
 static void udp_close_target(struct sender_client *sc)
 {
        if (sc->cq != NULL) {
-               del_close_on_fork_list(sc->fd);
                cq_destroy(sc->cq);
                sc->cq = NULL;
        }
                cq_destroy(sc->cq);
                sc->cq = NULL;
        }
@@ -70,6 +69,7 @@ static void udp_delete_target(struct sender_client *sc, const char *msg)
        PARA_NOTICE_LOG("deleting %s (%s) from list\n", sc->name, msg);
        udp_close_target(sc);
        close(sc->fd);
        PARA_NOTICE_LOG("deleting %s (%s) from list\n", sc->name, msg);
        udp_close_target(sc);
        close(sc->fd);
+       del_close_on_fork_list(sc->fd);
        vss_del_fec_client(ut->fc);
        list_del(&sc->node);
        free(sc->name);
        vss_del_fec_client(ut->fc);
        list_del(&sc->node);
        free(sc->name);
@@ -160,7 +160,6 @@ static void udp_init_session(struct sender_client *sc)
 {
        if (sc->cq == NULL) {
                sc->cq = cq_new(UDP_CQ_BYTES);
 {
        if (sc->cq == NULL) {
                sc->cq = cq_new(UDP_CQ_BYTES);
-               add_close_on_fork_list(sc->fd);
                PARA_NOTICE_LOG("sending to udp %s\n", sc->name);
        }
 }
                PARA_NOTICE_LOG("sending to udp %s\n", sc->name);
        }
 }
@@ -363,6 +362,7 @@ static int udp_com_add(struct sender_command_data *scd)
        PARA_INFO_LOG("adding to target list (%s)\n", sc->name);
        ut->fc = vss_add_fec_client(sc, &ut->fcp);
        para_list_add(&sc->node, &targets);
        PARA_INFO_LOG("adding to target list (%s)\n", sc->name);
        ut->fc = vss_add_fec_client(sc, &ut->fcp);
        para_list_add(&sc->node, &targets);
+       add_close_on_fork_list(sc->fd);
        return 1;
 err:
        if (sc->fd >= 0)
        return 1;
 err:
        if (sc->fd >= 0)