X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fubus.git;a=blobdiff_plain;f=libubus-req.c;h=416adaba2f9fca50225d9915b2512026a7b481f1;hp=ebc580684eb0f1e20fa197f96f5538010ca5e3c2;hb=3b8d4b5653ef47bd2032d377cecfee40b613eb72;hpb=3e45a782b22c067eab125b377474f5da11eabbe9;ds=sidebyside diff --git a/libubus-req.c b/libubus-req.c index ebc5806..416adab 100644 --- a/libubus-req.c +++ b/libubus-req.c @@ -153,12 +153,17 @@ int ubus_complete_request(struct ubus_context *ctx, struct ubus_request *req, 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); + break; + } } ctx->stack_depth--; if (ctx->stack_depth) @@ -174,7 +179,7 @@ int ubus_complete_request(struct ubus_context *ctx, struct ubus_request *req, if (!registered) { uloop_fd_delete(&ctx->sock); - if (ctx->stack_depth) + if (!ctx->stack_depth) ctx->pending_timer.cb(&ctx->pending_timer); } @@ -465,3 +470,9 @@ void __hidden ubus_process_req_msg(struct ubus_context *ctx, struct ubus_msghdr_ break; } } + +int __ubus_monitor(struct ubus_context *ctx, const char *type) +{ + blob_buf_init(&b, 0); + return ubus_invoke(ctx, UBUS_SYSTEM_OBJECT_MONITOR, type, b.head, NULL, NULL, 1000); +}