summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorGergely Nagy <algernon@balabit.hu>2012-06-22 15:32:14 +0200
committerGergely Nagy <algernon@balabit.hu>2012-06-22 15:32:14 +0200
commit8835222c34bf853f33119eeb49575b8ad71c5c5f (patch)
tree64e77382fd359479b89ac90ed909e11cfaa97e26 /lib
parent76a5b0ad508949707cd77c61c173e543221fcef9 (diff)
downloadlibumberlog-8835222c34bf853f33119eeb49575b8ad71c5c5f.tar.gz
libumberlog-8835222c34bf853f33119eeb49575b8ad71c5c5f.tar.xz
libumberlog-8835222c34bf853f33119eeb49575b8ad71c5c5f.zip
Remove escape_buffer entirely
Output the escaped content directly into the destination buffer, avoiding the memory copy and associated overhead. This finishes the series, and brings another 6.6-18.0% speed improvement in test_perf, compared to the previous increase with using a static exception map. Signed-off-by: Miloslav Trmač <mitr@redhat.com> Signed-off-by: Gergely Nagy <algernon@balabit.hu>
Diffstat (limited to 'lib')
-rw-r--r--lib/buffer.c32
1 files changed, 7 insertions, 25 deletions
diff --git a/lib/buffer.c b/lib/buffer.c
index ef4e2d7..cdb494c 100644
--- a/lib/buffer.c
+++ b/lib/buffer.c
@@ -34,16 +34,6 @@
#include <stdlib.h>
#include <string.h>
-static __thread ul_buffer_t escape_buffer;
-
-static void ul_buffer_finish (void) __attribute__((destructor));
-
-static void
-ul_buffer_finish (void)
-{
- free (escape_buffer.msg);
-}
-
static int
_ul_buffer_realloc_to_reserve (ul_buffer_t *buffer, size_t size)
{
@@ -193,35 +183,27 @@ ul_buffer_reset (ul_buffer_t *buffer)
ul_buffer_t *
ul_buffer_append (ul_buffer_t *buffer, const char *key, const char *value)
{
- size_t lk, lv;
size_t orig_len = buffer->ptr - buffer->msg;
/* Append the key to the buffer */
- escape_buffer.ptr = escape_buffer.msg;
- if (_ul_str_escape (&escape_buffer, key) != 0)
+ if (_ul_buffer_reserve_size (buffer, 1) != 0)
goto err;
- lk = escape_buffer.ptr - escape_buffer.msg;
+ *buffer->ptr++ = '"';
- if (_ul_buffer_reserve_size (buffer, lk + 4) != 0)
+ if (_ul_str_escape (buffer, key) != 0)
goto err;
- *buffer->ptr++ = '"';
- memcpy (buffer->ptr, escape_buffer.msg, lk);
- buffer->ptr += lk;
+ if (_ul_buffer_reserve_size (buffer, 3) != 0)
+ goto err;
memcpy (buffer->ptr, "\":\"", 3);
buffer->ptr += 3;
/* Append the value to the buffer */
- escape_buffer.ptr = escape_buffer.msg;
- if (_ul_str_escape (&escape_buffer, value) != 0)
+ if (_ul_str_escape (buffer, value) != 0)
goto err;
- lv = escape_buffer.ptr - escape_buffer.msg;
- if (_ul_buffer_reserve_size (buffer, lv + 2) != 0)
+ if (_ul_buffer_reserve_size (buffer, 2) != 0)
goto err;
-
- memcpy (buffer->ptr, escape_buffer.msg, lv);
- buffer->ptr += lv;
memcpy (buffer->ptr, "\",", 2);
buffer->ptr += 2;