[LEDE-DEV] [PATCH ubus] libubus: Fix deletion from context's object AVL tree when removing object

Bob Ham bob.ham at tomltd.co.uk
Thu Nov 9 07:53:24 PST 2017


Objects are stored in the ubus context in an AVL tree.  An AVL tree
node contains a pointer to a key value.  For the ubus context, this
points to the id member of the object structure.  In
ubus_remove_object_cb, the id member is set to zero and then after,
avl_delete is called and fails.  To fix this, we call avl_delete
before setting the object id to zero.

Signed-off-by: Bob Ham <bob.ham at tomltd.co.uk>
---
 libubus-obj.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libubus-obj.c b/libubus-obj.c
index a9972c5..9261b83 100644
--- a/libubus-obj.c
+++ b/libubus-obj.c
@@ -237,12 +237,12 @@ static void ubus_remove_object_cb(struct ubus_request *req, int type, struct blo
 	if (!attrbuf[UBUS_ATTR_OBJID])
 		return;
 
+	avl_delete(&req->ctx->objects, &obj->avl);
+
 	obj->id = 0;
 
 	if (attrbuf[UBUS_ATTR_OBJTYPE] && obj->type)
 		obj->type->id = 0;
-
-	avl_delete(&req->ctx->objects, &obj->avl);
 }
 
 int ubus_remove_object(struct ubus_context *ctx, struct ubus_object *obj)
-- 
2.11.0




More information about the Lede-dev mailing list