summaryrefslogtreecommitdiff
path: root/src/pool.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pool.c')
-rw-r--r--src/pool.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/pool.c b/src/pool.c
index cb98f1af1..34d0adc1f 100644
--- a/src/pool.c
+++ b/src/pool.c
@@ -23,17 +23,18 @@ static void *pool_alloc_page(git_pool *pool, size_t size);
static size_t pool_system_page_size(void)
{
- static size_t size = 0;
+ static git_atomic_ssize cached_size = {0};
+ size_t page_size = 0;
- if (!size) {
- size_t page_size;
+ if ((page_size = (size_t)git_atomic_ssize_get(&cached_size)) == 0) {
if (git__page_size(&page_size) < 0)
page_size = 4096;
/* allow space for malloc overhead */
- size = (page_size - (2 * sizeof(void *)) - sizeof(git_pool_page));
+ page_size -= (2 * sizeof(void *)) + sizeof(git_pool_page);
+ git_atomic_ssize_set(&cached_size, (int64_t)page_size);
}
- return size;
+ return page_size;
}
#ifndef GIT_DEBUG_POOL