on interface free, remove the main_dev user if still present
[project/netifd.git] / interface.c
index 5b50314..e67c695 100644 (file)
@@ -169,6 +169,8 @@ interface_set_available(struct interface *iface, bool new_state)
 static void
 interface_do_free(struct interface *iface)
 {
+       if (iface->main_dev.dev)
+               device_remove_user(&iface->main_dev);
        interface_set_proto_state(iface, NULL);
        free(iface->config);
        netifd_ubus_remove_interface(iface);
@@ -384,6 +386,7 @@ interface_change_config(struct interface *if_old, struct interface *if_new)
 
        set_config_state(if_old, IFC_RELOAD);
        free(old_config);
+       free(if_new);
 }
 
 static void
@@ -410,4 +413,6 @@ interface_init_list(void)
 {
        vlist_init(&interfaces, avl_strcmp, interface_update,
                   struct interface, node, name);
+       interfaces.keep_old = true;
+       interfaces.no_delete = true;
 }