summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2012-10-19 15:48:52 +0200
committerFelix Fietkau <nbd@openwrt.org>2012-10-19 15:48:52 +0200
commit30e9a048af138b39ee0d53451da43eddd6f48fda (patch)
tree85015552d2e36d656cfcd0d0e5235bd6dce7a942
parent6653b861748719ab58e21a81e01d59d4d8afe10c (diff)
downloadnetifd-30e9a048af138b39ee0d53451da43eddd6f48fda.tar.gz
fix device_lock/device_unlock imbalances
-rw-r--r--alias.c3
-rw-r--r--ubus.c7
2 files changed, 7 insertions, 3 deletions
diff --git a/alias.c b/alias.c
index 07ed5fe..72018d4 100644
--- a/alias.c
+++ b/alias.c
@@ -108,7 +108,7 @@ alias_notify_device(const char *name, struct device *dev)
alias = avl_find_element(&aliases, name, alias, avl);
if (!alias)
- return;
+ goto out;
alias->cleanup = !dev;
if (dev) {
@@ -128,6 +128,7 @@ alias_notify_device(const char *name, struct device *dev)
device_broadcast_event(&alias->dev, DEV_EVENT_UPDATE_IFNAME);
}
+out:
device_unlock();
}
diff --git a/ubus.c b/ubus.c
index be9e632..3ea71bf 100644
--- a/ubus.c
+++ b/ubus.c
@@ -595,8 +595,10 @@ netifd_iface_handle_device(struct ubus_context *ctx, struct ubus_object *obj,
device_lock();
dev = device_get(blobmsg_data(tb[DEV_NAME]), add ? 2 : 0);
- if (add && !dev)
- return UBUS_STATUS_NOT_FOUND;
+ if (add && !dev) {
+ ret = UBUS_STATUS_NOT_FOUND;
+ goto out;
+ }
if (add) {
device_set_present(dev, true);
@@ -609,6 +611,7 @@ netifd_iface_handle_device(struct ubus_context *ctx, struct ubus_object *obj,
ret = interface_remove_link(iface, dev);
}
+out:
device_unlock();
return ret;