X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fubus.git;a=blobdiff_plain;f=libubus.c;h=b889e5a3cbd41841e6dde7068d2263c7ae004a16;hp=7bf67a7a2a537d9068bc3ef36748454e79395207;hb=749aaf3b6d871da2d6a7edcbc9a3dce9226dc06d;hpb=527d2523330cb41e23a435d89352680d108c789a diff --git a/libubus.c b/libubus.c index 7bf67a7..b889e5a 100644 --- a/libubus.c +++ b/libubus.c @@ -178,7 +178,8 @@ static void ubus_process_req_data(struct ubus_request *req) data = list_first_entry(&req->pending, struct ubus_pending_data, list); list_del(&data->list); - req->data_cb(req, data->type, data->data); + if (!req->cancelled) + req->data_cb(req, data->type, data->data); free(data); } } @@ -300,6 +301,8 @@ void ubus_abort_request(struct ubus_context *ctx, struct ubus_request *req) if (!list_empty(&req->list)) return; + req->cancelled = true; + ubus_process_req_data(req); list_del(&req->list); } @@ -331,6 +334,9 @@ int ubus_complete_request(struct ubus_context *ctx, struct ubus_request *req) if (req->status_msg) return req->status_code; + if (req->cancelled) + return UBUS_STATUS_NO_DATA; + if (!get_next_msg(ctx, true)) return UBUS_STATUS_NO_DATA;