ubusd_monitor: alloc & free the buffer outside of the loop
authorAlexandru Ardelean <ardeleanalex@gmail.com>
Wed, 5 Jul 2017 13:21:47 +0000 (16:21 +0300)
committerFelix Fietkau <nbd@nbd.name>
Mon, 13 Nov 2017 08:57:55 +0000 (09:57 +0100)
Should save a few cycles, since the data that's
being changed is only the seq number.
And the `ub` is always created as shared.

Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>
ubusd_monitor.c

index a192206ec90b48b321419ee6fde09abaac98e04b..fcbc6a4b10c0199ac30ef545fea66cdf533e00eb 100644 (file)
@@ -72,13 +72,15 @@ ubusd_monitor_message(struct ubus_client *cl, struct ubus_msg_buf *ub, bool send
        blob_put_int8(&mb, UBUS_MONITOR_SEND, send);
        blob_put(&mb, UBUS_MONITOR_DATA, blob_data(ub->data), blob_len(ub->data));
 
+       ub = ubus_msg_new(mb.head, blob_raw_len(mb.head), true);
+       ub->hdr.type = UBUS_MSG_MONITOR;
+
        list_for_each_entry(m, &monitors, list) {
-               ub = ubus_msg_new(mb.head, blob_raw_len(mb.head), true);
-               ub->hdr.type = UBUS_MSG_MONITOR;
                ub->hdr.seq = ++m->seq;
                ubus_msg_send(m->cl, ub);
-               ubus_msg_free(ub);
        }
+
+       ubus_msg_free(ub);
 }
 
 static int