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;
uloop_cancelled = cancelled;
}
ctx->stack_depth--;
+ if (ctx->stack_depth)
+ uloop_cancelled = true;
if (timeout)
uloop_timeout_cancel(&cb.timeout);
if (ret < 0)
return ret;
- if (timeout < 0)
+ if (timeout < 0) {
+ ubus_abort_request(ctx, &req.req);
return 0;
+ }
return ubus_complete_request(ctx, &req.req, timeout);
}