diff options
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 22 |
1 files changed, 15 insertions, 7 deletions
@@ -7749,13 +7749,14 @@ blk_mark(data) } static void -blk_free(data) - struct BLOCK *data; -{ +frame_free(frame) struct FRAME *frame; - void *tmp; +{ + struct FRAME *tmp; - frame = data->frame.prev; + if (frame->argc > 0 && (frame->flags & FRAME_MALLOC)) + free(frame->argv); + frame = frame->prev; while (frame) { if (frame->argc > 0 && (frame->flags & FRAME_MALLOC)) free(frame->argv); @@ -7763,9 +7764,16 @@ blk_free(data) frame = frame->prev; free(tmp); } +} + +static void +blk_free(data) + struct BLOCK *data; +{ + void *tmp; + while (data) { - if (data->frame.argc > 0) - free(data->frame.argv); + frame_free(&data->frame); tmp = data; data = data->prev; free(tmp); |