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) {
68
68
const size_t align = sizeof (size_t ) - 1 ;
69
69
sz = (sz + align ) & ~align ;
70
70
71
+ struct arena_chunk * chunk ;
71
72
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 ;
74
78
}
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 ;
80
81
* ((size_t * ) ptr ) = sz - sizeof (size_t );
81
82
return (uint8_t * ) ptr + sizeof (size_t );
82
83
}
You can’t perform that action at this time.
0 commit comments