diff options
author | Gergely Nagy <algernon@balabit.hu> | 2012-06-22 15:32:14 +0200 |
---|---|---|
committer | Gergely Nagy <algernon@balabit.hu> | 2012-06-22 15:32:14 +0200 |
commit | 8835222c34bf853f33119eeb49575b8ad71c5c5f (patch) | |
tree | 64e77382fd359479b89ac90ed909e11cfaa97e26 /lib | |
parent | 76a5b0ad508949707cd77c61c173e543221fcef9 (diff) | |
download | libumberlog-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.c | 32 |
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; |