diff options
Diffstat (limited to 'ctdb/common/ctdb_io.c')
-rw-r--r-- | ctdb/common/ctdb_io.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/ctdb/common/ctdb_io.c b/ctdb/common/ctdb_io.c index 351006db2d..0a85f3bcd7 100644 --- a/ctdb/common/ctdb_io.c +++ b/ctdb/common/ctdb_io.c @@ -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; |