ctdb: Avoid a talloc in ctdb_queue_send
authorVolker Lendecke <vl@samba.org>
Mon, 21 Jul 2014 09:42:54 +0000 (09:42 +0000)
committerAmitay Isaacs <amitay@samba.org>
Tue, 22 Jul 2014 01:42:13 +0000 (03:42 +0200)
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
ctdb/common/ctdb_io.c

index 351006db2d354674684828055eee0e5d50df5734..0a85f3bcd7aa4e8e7889deda70db252a0b5c750c 100644 (file)
@@ -44,6 +44,7 @@ struct ctdb_queue_pkt {
        uint8_t *data;
        uint32_t length;
        uint32_t full_length;
+       uint8_t buf[];
 };
 
 struct ctdb_queue {
@@ -324,11 +325,13 @@ int ctdb_queue_send(struct ctdb_queue *queue, uint8_t *data, uint32_t length)
                if (length2 == 0) return 0;
        }
 
-       pkt = talloc(queue, struct ctdb_queue_pkt);
+       pkt = talloc_size(
+               queue, offsetof(struct ctdb_queue_pkt, buf) + length2);
        CTDB_NO_MEMORY(queue->ctdb, pkt);
+       talloc_set_name_const(pkt, "struct ctdb_queue_pkt");
 
-       pkt->data = talloc_memdup(pkt, data, length2);
-       CTDB_NO_MEMORY(queue->ctdb, pkt->data);
+       pkt->data = pkt->buf;
+       memcpy(pkt->data, data, length2);
 
        pkt->length = length2;
        pkt->full_length = full_length;