From: Felix Fietkau Date: Mon, 15 Sep 2014 13:21:40 +0000 (+0200) Subject: libubus: use calloc_a for queued msgs to reduce the number of allocations X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fubus.git;a=commitdiff_plain;h=7c25c119a58e66a6dded43262b73df71df4da505 libubus: use calloc_a for queued msgs to reduce the number of allocations Signed-off-by: Felix Fietkau --- diff --git a/libubus.c b/libubus.c index e42f14f..35c61ef 100644 --- a/libubus.c +++ b/libubus.c @@ -74,16 +74,14 @@ static void ubus_queue_msg(struct ubus_context *ctx, struct ubus_msghdr *hdr) { struct ubus_pending_msg *pending; + void *data; - pending = calloc(1, sizeof(*pending)); - if (!pending) - return; - pending->hdr.data = calloc(1, blob_raw_len(ubus_msghdr_data(hdr))); - if (!pending->hdr.data) - return; + pending = calloc_a(sizeof(*pending), + &data, blob_raw_len(ubus_msghdr_data(hdr))); + pending->hdr.data = data; memcpy(&pending->hdr.hdr, hdr, sizeof(*hdr)); - memcpy(pending->hdr.data, ubus_msghdr_data(hdr), blob_raw_len(ubus_msghdr_data(hdr))); + memcpy(data, ubus_msghdr_data(hdr), blob_raw_len(ubus_msghdr_data(hdr))); list_add(&pending->list, &ctx->pending); if (ctx->sock.registered) uloop_timeout_set(&ctx->pending_timer, 1); @@ -121,7 +119,6 @@ static void ubus_process_pending_msg(struct uloop_timeout *timeout) pending = list_first_entry(&ctx->pending, struct ubus_pending_msg, list); list_del(&pending->list); ubus_process_msg(ctx, &pending->hdr.hdr, -1); - free(pending->hdr.data); free(pending); } }