From a7aa17ff3c9df1f0991c4f81c35be1e8cb9d4ce9 Mon Sep 17 00:00:00 2001
From: Jakob Olsson <jakobols@kth.se>
Date: Wed, 13 Jun 2018 09:24:00 +0200
Subject: [PATCH] update add_device and related functionality by feedback

---
 dongle.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/dongle.c b/dongle.c
index 233f236..00ee59a 100644
--- a/dongle.c
+++ b/dongle.c
@@ -138,7 +138,6 @@ int update_device(struct device *dev)
 	}
 	prev_dev->present = true;
 
-	delete_device(dev);
 	return 0;
 not_present:
 	return -1;
@@ -155,10 +154,11 @@ int add_device(struct device *dev)
 		goto already_present;
 
 	dev->present = true;
+
 	if (list_empty(&devices))
 		INIT_LIST_HEAD(&devices);
-
 	list_add_tail(&dev->list, &devices);
+
 	if (dev->ip) {
 		dev->ubus_obj = dongle_create_dynamic_object(dev);
 		if (!dev->ubus_obj)
@@ -166,7 +166,7 @@ int add_device(struct device *dev)
 
 		rv = publish_ubus_object(global_ctx, dev->ubus_obj);
 		if (rv)
-			goto fail;
+			goto fail_publish;
 
 		global_dev = dev;
 	}
@@ -174,6 +174,8 @@ int add_device(struct device *dev)
 	return 0;
 already_present:
 	return -1;
+fail_publish:
+	dongle_destroy_dynamic_object(dev->ubus_obj);
 fail:
 	return -2;
 }
@@ -453,7 +455,10 @@ int get_devices_from_path(char *input_path)
 		dev->usb.if_name = name;
 		dev->ip = get_device_ip(dev->usb.if_name);
 
-		add_device(dev);
+		rv = add_device(dev);
+		if (rv < 0)
+			delete_device(dev);
+
 		break;
 	}
 	closedir(dir);
-- 
GitLab