From 6595c7c75b00e46d9117b9d7eb5a90dfdcee1505 Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Fri, 14 Mar 2014 17:26:38 -0500 Subject: [PATCH] Improve SerializationFormat's write buffer growth strategy. --- src/SerializationFormat.cc | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/SerializationFormat.cc b/src/SerializationFormat.cc index eb8462521e..20392e5a73 100644 --- a/src/SerializationFormat.cc +++ b/src/SerializationFormat.cc @@ -13,7 +13,7 @@ SerializationFormat::SerializationFormat() SerializationFormat::~SerializationFormat() { - delete [] output; + free(output); } void SerializationFormat::StartRead(char* data, uint32 arg_len) @@ -33,13 +33,13 @@ void SerializationFormat::StartWrite() { if ( output && output_size > INITIAL_SIZE ) { - delete [] output; + free(output); output = 0; } if ( ! output ) { - output = new char[INITIAL_SIZE]; + output = (char*)safe_malloc(INITIAL_SIZE); output_size = INITIAL_SIZE; } @@ -75,11 +75,8 @@ bool SerializationFormat::WriteData(const void* b, size_t count) // Increase buffer if necessary. while ( output_pos + count > output_size ) { - output_size = output_pos + count + INITIAL_SIZE; - char* tmp = new char[output_size]; - memcpy(tmp, output, output_pos); - delete [] output; - output = tmp; + output_size += output_size * 1.5; + output = (char*)safe_realloc(output, output_size); } memcpy(output + output_pos, b, count);