File tree Expand file tree Collapse file tree 1 file changed +8
-7
lines changed
Expand file tree Collapse file tree 1 file changed +8
-7
lines changed Original file line number Diff line number Diff line change @@ -68,15 +68,16 @@ static void *arena_calloc(size_t nmem, size_t size) {
6868 const size_t align = sizeof (size_t ) - 1 ;
6969 sz = (sz + align ) & ~align ;
7070
71+ struct arena_chunk * chunk ;
7172 if (sz > A -> sz ) {
72- A -> prev = alloc_arena_chunk (sz , A -> prev );
73- return (uint8_t * ) A -> prev -> ptr + sizeof (size_t );
73+ A -> prev = chunk = alloc_arena_chunk (sz , A -> prev );
74+ } else if (sz > A -> sz - A -> used ) {
75+ A = chunk = alloc_arena_chunk (A -> sz + A -> sz / 2 , A );
76+ } else {
77+ chunk = A ;
7478 }
75- if (sz > A -> sz - A -> used ) {
76- A = alloc_arena_chunk (A -> sz + A -> sz / 2 , A );
77- }
78- void * ptr = (uint8_t * ) A -> ptr + A -> used ;
79- A -> used += sz ;
79+ void * ptr = (uint8_t * ) chunk -> ptr + chunk -> used ;
80+ chunk -> used += sz ;
8081 * ((size_t * ) ptr ) = sz - sizeof (size_t );
8182 return (uint8_t * ) ptr + sizeof (size_t );
8283}
You can’t perform that action at this time.
0 commit comments