logd: optimize notify function
authorLuka Perkov <luka@openwrt.org>
Tue, 21 Apr 2015 17:04:46 +0000 (19:04 +0200)
committerJohn Crispin <blogic@openwrt.org>
Thu, 14 May 2015 04:25:52 +0000 (06:25 +0200)
No need to construct every time the same blob_buf for each client in the list.

Signed-off-by: Luka Perkov <luka@openwrt.org>
log/logd.c

index a4335ea..27d3cac 100644 (file)
@@ -147,15 +147,17 @@ ubus_notify_log(struct log_head *l)
        if (list_empty(&clients))
                return;
 
-       list_for_each_entry(c, &clients, list) {
-               blob_buf_init(&b, 0);
-               blobmsg_add_string(&b, "msg", l->data);
-               blobmsg_add_u32(&b, "id", l->id);
-               blobmsg_add_u32(&b, "priority", l->priority);
-               blobmsg_add_u32(&b, "source", l->source);
-               blobmsg_add_u64(&b, "time", (((__u64) l->ts.tv_sec) * 1000) + (l->ts.tv_nsec / 1000000));
+       blob_buf_init(&b, 0);
+       blobmsg_add_string(&b, "msg", l->data);
+       blobmsg_add_u32(&b, "id", l->id);
+       blobmsg_add_u32(&b, "priority", l->priority);
+       blobmsg_add_u32(&b, "source", l->source);
+       blobmsg_add_u64(&b, "time", (((__u64) l->ts.tv_sec) * 1000) + (l->ts.tv_nsec / 1000000));
+
+       list_for_each_entry(c, &clients, list)
                ustream_write(&c->s.stream, (void *) b.head, blob_len(b.head) + sizeof(struct blob_attr), false);
-       }
+
+       blob_buf_free(&b);
 }
 
 static void