udp_send: Add/remove the udp socket fd only once.
[paraslash.git] / 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)