projects
/
project
/
ubus.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
workaround possibly false positive uses of memory after it is freed
[project/ubus.git]
/
libubus.c
diff --git
a/libubus.c
b/libubus.c
index 846ae83bcc1216f32067b0c771d8053d9190a33b..b405891416c22856729ae2193cde60231bd52ad3 100644
(file)
--- a/
libubus.c
+++ b/
libubus.c
@@
-115,10
+115,12
@@
ubus_process_msg(struct ubus_context *ctx, struct ubus_msghdr_buf *buf, int fd)
static void ubus_process_pending_msg(struct uloop_timeout *timeout)
{
struct ubus_context *ctx = container_of(timeout, struct ubus_context, pending_timer);
static void ubus_process_pending_msg(struct uloop_timeout *timeout)
{
struct ubus_context *ctx = container_of(timeout, struct ubus_context, pending_timer);
- struct ubus_pending_msg *pending;
+ struct ubus_pending_msg *pending, *tmp;
+
+ list_for_each_entry_safe(pending, tmp, &ctx->pending, list) {
+ if (ctx->stack_depth)
+ break;
- while (!ctx->stack_depth && !list_empty(&ctx->pending)) {
- pending = list_first_entry(&ctx->pending, struct ubus_pending_msg, list);
list_del(&pending->list);
ubus_process_msg(ctx, &pending->hdr, -1);
free(pending);
list_del(&pending->list);
ubus_process_msg(ctx, &pending->hdr, -1);
free(pending);