summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorStef Walter <stef@thewalter.net>2014-08-07 08:38:46 +0200
committerStef Walter <stef@thewalter.net>2014-08-07 08:38:46 +0200
commit4f2cc97a95733e9ea8f85510b0f1e5c99053ae5e (patch)
treeccfada5a2945dc3de73daa6538acb20b9ab85a71 /common
parent08a017dbae88f6e57eee387b5984d0494e62d976 (diff)
common: Don't do repeated linear reallocation of array memory
Some mallocs (notably on Windows) have really poor behavior when called repeatedly with a linearly growing buffer. https://bugzilla.redhat.com/show_bug.cgi?id=985419
Diffstat (limited to 'common')
-rw-r--r--common/array.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/common/array.c b/common/array.c
index 9802100..9bff748 100644
--- a/common/array.c
+++ b/common/array.c
@@ -48,7 +48,10 @@ maybe_expand_array (p11_array *array,
if (length <= array->allocated)
return true;
- new_allocated = array->allocated + 16;
+
+ new_allocated = array->allocated * 2;
+ if (new_allocated == 0)
+ new_allocated = 16;
if (new_allocated < length)
new_allocated = length;