libubus: use list_empty/list_first_entry in ubus_process_pending_msg
Simplifies checks and avoids potential list corruption on recursive calls Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
b743a33142
commit
2099bb3ad9
1 changed files with 3 additions and 2 deletions
|
@ -115,12 +115,13 @@ ubus_process_msg(struct ubus_context *ctx, struct ubus_msghdr_buf *buf, int fd)
|
||||||
static void ubus_process_pending_msg(struct uloop_timeout *timeout)
|
static void ubus_process_pending_msg(struct uloop_timeout *timeout)
|
||||||
{
|
{
|
||||||
struct ubus_context *ctx = container_of(timeout, struct ubus_context, pending_timer);
|
struct ubus_context *ctx = container_of(timeout, struct ubus_context, pending_timer);
|
||||||
struct ubus_pending_msg *pending, *tmp;
|
struct ubus_pending_msg *pending;
|
||||||
|
|
||||||
list_for_each_entry_safe(pending, tmp, &ctx->pending, list) {
|
while (!list_empty(&ctx->pending)) {
|
||||||
if (ctx->stack_depth)
|
if (ctx->stack_depth)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
pending = list_first_entry(&ctx->pending, struct ubus_pending_msg, list);
|
||||||
list_del(&pending->list);
|
list_del(&pending->list);
|
||||||
ubus_process_msg(ctx, &pending->hdr, -1);
|
ubus_process_msg(ctx, &pending->hdr, -1);
|
||||||
free(pending);
|
free(pending);
|
||||||
|
|
Loading…
Reference in a new issue