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