diff options
author | Russell Belfer <rb@github.com> | 2013-03-14 15:08:04 -0700 |
---|---|---|
committer | Russell Belfer <rb@github.com> | 2013-03-14 15:08:04 -0700 |
commit | 14bedad90776b750cf69ed6faadf2d6c3a4e0a86 (patch) | |
tree | 249783cd91960c1848a275cc173e0e826c4334cb /src/pool.c | |
parent | d85296ab9b9c4a01adb35d4d2438b72177aeabc4 (diff) | |
download | libgit2-14bedad90776b750cf69ed6faadf2d6c3a4e0a86.tar.gz |
Added pool freelist struct for readability
This adds a git_pool_freelist_item struct that makes it a little
easier to follow what's going on with the pool free list block
management code. It is functionally neutral.
Diffstat (limited to 'src/pool.c')
-rw-r--r-- | src/pool.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/pool.c b/src/pool.c index 6b78a0b74..33ea74fc7 100644 --- a/src/pool.c +++ b/src/pool.c @@ -10,6 +10,11 @@ struct git_pool_page { char data[GIT_FLEX_ARRAY]; }; +typedef struct git_pool_freelist_item git_pool_freelist_item; +struct git_pool_freelist_item { + git_pool_freelist_item *next; +}; + #define GIT_POOL_MIN_USABLE 4 #define GIT_POOL_MIN_PAGESZ 2 * sizeof(void*) @@ -150,7 +155,7 @@ void *git_pool_malloc(git_pool *pool, uint32_t items) pool->has_multi_item_alloc = 1; else if (pool->free_list != NULL) { ptr = pool->free_list; - pool->free_list = *((void **)pool->free_list); + pool->free_list = ((git_pool_freelist_item *)pool->free_list)->next; return ptr; } @@ -235,16 +240,19 @@ char *git_pool_strcat(git_pool *pool, const char *a, const char *b) void git_pool_free(git_pool *pool, void *ptr) { + git_pool_freelist_item *item = ptr; + assert(pool && pool->item_size >= sizeof(void*)); - if (ptr) { - *((void **)ptr) = pool->free_list; - pool->free_list = ptr; + if (item) { + item->next = pool->free_list; + pool->free_list = item; } } void git_pool_free_array(git_pool *pool, size_t count, void **ptrs) { + git_pool_freelist_item **items = (git_pool_freelist_item **)ptrs; size_t i; assert(pool && ptrs && pool->item_size >= sizeof(void*)); @@ -253,10 +261,10 @@ void git_pool_free_array(git_pool *pool, size_t count, void **ptrs) return; for (i = count - 1; i > 0; --i) - *((void **)ptrs[i]) = ptrs[i - 1]; + items[i]->next = items[i - 1]; - *((void **)ptrs[0]) = pool->free_list; - pool->free_list = ptrs[count - 1]; + items[i]->next = pool->free_list; + pool->free_list = items[count - 1]; } uint32_t git_pool__open_pages(git_pool *pool) |