diff options
author | Amitay Isaacs <amitay@gmail.com> | 2014-05-06 18:26:41 +1000 |
---|---|---|
committer | Amitay Isaacs <amitay@samba.org> | 2014-07-23 07:18:11 +0200 |
commit | 42ba7a0a400c970dd534e92d2effa3ed385f8d6d (patch) | |
tree | 5983a6c4491e3c75cd5174060c7f1425c685087d /ctdb/common | |
parent | 64ea6e30ef601d91ea16f6a9c5b7a6b9395c0152 (diff) | |
download | samba-42ba7a0a400c970dd534e92d2effa3ed385f8d6d.tar.gz |
ctdb-util: Refactor record marshalling routines to avoid extra talloc
Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Volker Lendecke <vl@samba.org>
Diffstat (limited to 'ctdb/common')
-rw-r--r-- | ctdb/common/ctdb_util.c | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/ctdb/common/ctdb_util.c b/ctdb/common/ctdb_util.c index 6b741ce7d9f..c4ac583b99f 100644 --- a/ctdb/common/ctdb_util.c +++ b/ctdb/common/ctdb_util.c @@ -248,36 +248,29 @@ struct ctdb_marshall_buffer *ctdb_marshall_add(TALLOC_CTX *mem_ctx, TDB_DATA data) { struct ctdb_rec_data *r; - size_t m_size, r_size; struct ctdb_marshall_buffer *m2; + uint32_t length, offset; - r = ctdb_marshall_record(mem_ctx, reqid, key, header, data); - if (r == NULL) { - talloc_free(m); - return NULL; - } + length = ctdb_marshall_record_size(key, header, data); if (m == NULL) { - m = talloc_zero_size(mem_ctx, offsetof(struct ctdb_marshall_buffer, data)); - if (m == NULL) { - return NULL; - } - m->db_id = db_id; + offset = offsetof(struct ctdb_marshall_buffer, data); + m2 = talloc_zero_size(mem_ctx, offset + length); + } else { + offset = talloc_get_size(m); + m2 = talloc_realloc_size(mem_ctx, m, offset + length); } - - m_size = talloc_get_size(m); - r_size = talloc_get_size(r); - - m2 = talloc_realloc_size(mem_ctx, m, m_size + r_size); if (m2 == NULL) { - talloc_free(m); + TALLOC_FREE(m); return NULL; } - memcpy(m_size + (uint8_t *)m2, r, r_size); - - talloc_free(r); + if (m == NULL) { + m2->db_id = db_id; + } + r = (struct ctdb_rec_data *)((uint8_t *)m2 + offset); + ctdb_marshall_record_copy(r, reqid, key, header, data, length); m2->count++; return m2; |