diff options
author | Stef Walter <stef@thewalter.net> | 2014-08-07 08:38:46 +0200 |
---|---|---|
committer | Stef Walter <stef@thewalter.net> | 2014-08-07 08:38:46 +0200 |
commit | 4f2cc97a95733e9ea8f85510b0f1e5c99053ae5e (patch) | |
tree | ccfada5a2945dc3de73daa6538acb20b9ab85a71 /common | |
parent | 08a017dbae88f6e57eee387b5984d0494e62d976 (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.c | 5 |
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; |