From fc804d0faf10919d60471e8b9599caad02cc7194 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Sat, 27 May 2017 06:59:18 -0400 Subject: [PATCH] Clean-up: simplify the implementation of dynamic buffer set_capacity MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Only use realloc() to implement set_capacity's logic. In the case where buf is NULL, realloc acts like malloc() anyhow. Moreover, the memory does not need to be zeroed on allocation since size increases provide this guarantee. Signed-off-by: Jérémie Galarneau --- src/common/dynamic-buffer.c | 47 +++++++++++++------------------------ 1 file changed, 16 insertions(+), 31 deletions(-) diff --git a/src/common/dynamic-buffer.c b/src/common/dynamic-buffer.c index c295a5d2e..9ed16514f 100644 --- a/src/common/dynamic-buffer.c +++ b/src/common/dynamic-buffer.c @@ -136,48 +136,33 @@ end: } int lttng_dynamic_buffer_set_capacity(struct lttng_dynamic_buffer *buffer, - size_t new_capacity) + size_t demanded_capacity) { int ret = 0; - size_t rounded_capacity = round_to_power_of_2(new_capacity); + void *new_buf; + size_t new_capacity = round_to_power_of_2(demanded_capacity); - if (!buffer || new_capacity < buffer->size) { + if (!buffer || demanded_capacity < buffer->size) { + /* + * Shrinking a buffer's size by changing its capacity is + * unsupported. + */ ret = -1; goto end; } - if (rounded_capacity == buffer->capacity) { + if (new_capacity == buffer->capacity) { goto end; } - if (!buffer->data) { - buffer->data = zmalloc(rounded_capacity); - if (!buffer->data) { - ret = -1; - goto end; - } - } else { - void *new_buf; - - new_buf = realloc(buffer->data, rounded_capacity); - if (new_buf) { - if (rounded_capacity > buffer->capacity) { - memset(new_buf + buffer->capacity, 0, - rounded_capacity - buffer->capacity); - } - } else { - /* Realloc failed, try to acquire a new block. */ - new_buf = zmalloc(rounded_capacity); - if (!new_buf) { - ret = -1; - goto end; - } - memcpy(new_buf, buffer->data, buffer->size); - free(buffer->data); - } - buffer->data = new_buf; + /* Memory is initialized by the size increases. */ + new_buf = realloc(buffer->data, new_capacity); + if (!new_buf) { + ret = -1; + goto end; } - buffer->capacity = rounded_capacity; + buffer->data = new_buf; + buffer->capacity = new_capacity; end: return ret; } -- 2.34.1