fix invalid close() call
[project/ubus.git] / libubus-obj.c
index a9972c5862eae0d62469e3010c346ed378877d12..b3019652c52d73a1f9e1c6d24abb821161f2a198 100644 (file)
@@ -95,7 +95,8 @@ found:
        ret = obj->methods[method].handler(ctx, obj, &req,
                                           blob_data(attrbuf[UBUS_ATTR_METHOD]),
                                           attrbuf[UBUS_ATTR_DATA]);
-       close(req.req_fd);
+       if (req.req_fd >= 0)
+               close(req.req_fd);
        if (req.deferred || no_reply)
                return;
 
@@ -237,12 +238,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)