This avoids running into timeouts when channel connections are lost.
Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (!ctx->stack_depth)
ctx->pending_timer.cb(&ctx->pending_timer);
- if (u->eof)
+ if (u->eof) {
+ ubus_flush_requests(ctx);
ctx->connection_lost(ctx);
+ }
}
void __hidden ubus_poll_data(struct ubus_context *ctx, int timeout)
return val;
}
+void ubus_flush_requests(struct ubus_context *ctx)
+{
+ struct ubus_request *req;
+
+ while (!list_empty(&ctx->requests)) {
+ req = list_first_entry(&ctx->requests, struct ubus_request, list);
+ ubus_set_req_status(req, UBUS_STATUS_TIMEOUT);
+ }
+}
+
int ubus_complete_request(struct ubus_context *ctx, struct ubus_request *req,
int req_timeout)
{
ubus_handler_t handler);
int ubus_channel_create(struct ubus_context *ctx, int *remote_fd,
ubus_handler_t handler);
+void ubus_flush_requests(struct ubus_context *ctx);
static inline bool
ubus_context_is_channel(struct ubus_context *ctx)