X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fubus.git;a=blobdiff_plain;f=libubus-req.c;fp=libubus-req.c;h=0c7d589241af93a303919a64bffb70674522e611;hp=db5061cad70887f15ab261154c51c732f2ea94ef;hb=91acde66b963e238aba35fb4f2030a147df84cd4;hpb=763b9b2cf293fb60b5c2ddf34e2500f95200b6b5 diff --git a/libubus-req.c b/libubus-req.c index db5061c..0c7d589 100644 --- a/libubus-req.c +++ b/libubus-req.c @@ -122,7 +122,7 @@ static void ubus_sync_req_cb(struct ubus_request *req, int ret) { req->status_msg = true; req->status_code = ret; - uloop_end(); + req->ctx->cancel_poll = true; } static int64_t get_time_msec(void) @@ -151,28 +151,26 @@ int ubus_complete_request(struct ubus_context *ctx, struct ubus_request *req, ctx->stack_depth++; while (!req->status_msg) { - bool cancelled = uloop_cancelled; - - uloop_cancelled = false; if (req_timeout) { timeout = time_end - get_time_msec(); if (timeout <= 0) { ubus_set_req_status(req, UBUS_STATUS_TIMEOUT); - uloop_cancelled = cancelled; break; } } + ubus_poll_data(ctx, (unsigned int) timeout); - uloop_cancelled = cancelled; if (ctx->sock.eof) { ubus_set_req_status(req, UBUS_STATUS_CONNECTION_FAILED); + ctx->cancel_poll = true; break; } } + ctx->stack_depth--; if (ctx->stack_depth) - uloop_cancelled = true; + ctx->cancel_poll = true; if (req->status_msg) status = req->status_code;