libubus: fix logic inversion for cancelling requests
[project/ubus.git] / libubus-req.c
index ec82979..43a5c26 100644 (file)
@@ -66,7 +66,7 @@ int __hidden ubus_start_request(struct ubus_context *ctx, struct ubus_request *r
 
 void ubus_abort_request(struct ubus_context *ctx, struct ubus_request *req)
 {
 
 void ubus_abort_request(struct ubus_context *ctx, struct ubus_request *req)
 {
-       if (!list_empty(&req->list))
+       if (list_empty(&req->list))
                return;
 
        req->cancelled = true;
                return;
 
        req->cancelled = true;
@@ -157,6 +157,8 @@ int ubus_complete_request(struct ubus_context *ctx, struct ubus_request *req,
                uloop_cancelled = cancelled;
        }
        ctx->stack_depth--;
                uloop_cancelled = cancelled;
        }
        ctx->stack_depth--;
+       if (ctx->stack_depth)
+               uloop_cancelled = true;
 
        if (timeout)
                uloop_timeout_cancel(&cb.timeout);
 
        if (timeout)
                uloop_timeout_cancel(&cb.timeout);
@@ -285,8 +287,10 @@ int ubus_notify(struct ubus_context *ctx, struct ubus_object *obj,
        if (ret < 0)
                return ret;
 
        if (ret < 0)
                return ret;
 
-       if (timeout < 0)
+       if (timeout < 0) {
+               ubus_abort_request(ctx, &req.req);
                return 0;
                return 0;
+       }
 
        return ubus_complete_request(ctx, &req.req, timeout);
 }
 
        return ubus_complete_request(ctx, &req.req, timeout);
 }