On Thu, Sep 26, 2019 at 03:54:32PM +0200, Miroslav Lichvar wrote:
> Don't require each port to have its own master table specified in the
> config. Instead of ports claming configured tables, clone the table in
> each port, so different ports don't interfere with each other.

I'd like to tack on this delta with error path cleanups.

Can you please check it for me?

---
diff --git a/port.c b/port.c
index 1f23fe1..3528219 100644
--- a/port.c
+++ b/port.c
@@ -3039,20 +3039,20 @@ struct port *port_open(int phc_index,
        }
        if (unicast_client_enabled(p) &&
            config_set_section_int(cfg, p->name, "hybrid_e2e", 1)) {
-               goto err_transport;
+               goto err_uc_client;
        }
        if (number && unicast_service_initialize(p)) {
-               goto err_transport;
+               goto err_uc_client;
        }
        p->hybrid_e2e = config_get_int(cfg, p->name, "hybrid_e2e");
 
        if (number && type == CLOCK_TYPE_P2P && p->delayMechanism != DM_P2P) {
                pr_err("port %d: P2P TC needs P2P ports", number);
-               goto err_transport;
+               goto err_uc_service;
        }
        if (number && type == CLOCK_TYPE_E2E && p->delayMechanism != DM_E2E) {
                pr_err("port %d: E2E TC needs E2E ports", number);
-               goto err_transport;
+               goto err_uc_service;
        }
        if (p->hybrid_e2e && p->delayMechanism != DM_E2E) {
                pr_warning("port %d: hybrid_e2e only works with E2E", number);
@@ -3078,7 +3078,7 @@ struct port *port_open(int phc_index,
                                  config_get_int(cfg, p->name, 
"delay_filter_length"));
        if (!p->tsproc) {
                pr_err("Failed to create time stamp processor");
-               goto err_transport;
+               goto err_uc_service;
        }
        p->nrate.ratio = 1.0;
 
@@ -3095,6 +3095,10 @@ struct port *port_open(int phc_index,
 
 err_tsproc:
        tsproc_destroy(p->tsproc);
+err_uc_client:
+       unicast_client_cleanup(p);
+err_uc_service:
+       unicast_service_cleanup(p);
 err_transport:
        transport_destroy(p->trp);
 err_port:
diff --git a/unicast_client.c b/unicast_client.c
index f41e59b..67e50ce 100644
--- a/unicast_client.c
+++ b/unicast_client.c
@@ -373,6 +373,7 @@ int unicast_client_initialize(struct port *p)
                                         table->peer_name, &peer->address)) {
                pr_err("port %d: bad peer address: %s",
                       portnum(p), table->peer_name);
+               free_master_table(table);
                return -1;
        }
        STAILQ_FOREACH(master, &table->addrs, list) {


_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to