From caa6c3b78595343c651bf4db96dc25db0b163486 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Thu, 3 Sep 2015 13:41:39 +0200 Subject: [PATCH] [test] buffer shrink in buffer_reserve --- ui/vnc.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/ui/vnc.c b/ui/vnc.c index aa6b0a5..728cbbe 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -667,6 +667,7 @@ void buffer_init(Buffer *buffer, int fd, const char *name) void buffer_reserve(Buffer *buffer, size_t len) { bool inc = false; + bool dec = false; assert(buffer->name); if ((buffer->capacity - buffer->offset) < len) { @@ -675,9 +676,17 @@ void buffer_reserve(Buffer *buffer, size_t len) buffer->buffer = g_realloc(buffer->buffer, buffer->capacity); inc = true; } - if (inc) { - fprintf(stderr, "%s: %-10s: %4zd kB\n", __func__, - buffer->name, buffer->capacity / 1024); + if (((buffer->offset + len) < buffer->capacity >> 4) && + (buffer->capacity > 64 * 1024)) { + buffer->capacity >>= 1; + buffer->capacity = MAX(buffer->capacity, 64 * 1024); + buffer->buffer = g_realloc(buffer->buffer, buffer->capacity); + dec = true; + } + if (inc || dec) { + fprintf(stderr, "%s: %-10s: %4zd kB %s\n", __func__, + buffer->name, buffer->capacity / 1024, + inc ? "+" : "-"); } } -- 1.8.3.1