diff options
| author | 2025-09-14 11:03:27 +0200 | |
|---|---|---|
| committer | 2025-09-14 11:03:27 +0200 | |
| commit | a95e385217841da91c3e44674dbaa95fb613a153 (patch) | |
| tree | a241ddf7c0b83fff1e45ccdf7feabaded9e4ed8d /mem.c | |
| parent | 0ca9f9fec545c6c73f9dae24c68271d792906a62 (diff) | |
change freearena for correctness
Diffstat (limited to 'mem.c')
| -rw-r--r-- | mem.c | 13 |
1 files changed, 7 insertions, 6 deletions
@@ -124,16 +124,17 @@ allocz(struct arena **par, uint siz, uint align) } void -freearena(struct arena *ar) +freearena(struct arena **par) { struct arena *prev; - for (; ar; ar = prev) { - prev = ar->prev; - if (ar->dyn) - free(ar); + for (; *par; *par = prev) { + prev = (*par)->prev; + if ((*par)->dyn) + free(*par); else { assert(!prev); - ar->n = 0; + (*par)->n = 0; + return; } } } |