diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-08-02 08:52:53 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-08-02 08:52:53 +0000 |
commit | dd028b39ed564a3b785a8400979149c919f44446 (patch) | |
tree | a40c06e5833079f840ea6d3864a9c0fa84832dae /eval.c | |
parent | 05ad2da3133ad49b865542791729989b70fbbce7 (diff) | |
download | ruby-dd028b39ed564a3b785a8400979149c919f44446.tar.gz ruby-dd028b39ed564a3b785a8400979149c919f44446.tar.xz ruby-dd028b39ed564a3b785a8400979149c919f44446.zip |
* eval.c (blk_free): fixed serious memory leak. [ruby-dev:24013]
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@6733 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 15 |
1 files changed, 14 insertions, 1 deletions
@@ -668,7 +668,6 @@ static unsigned long frame_unique = 0; _frame.node = ruby_current_node; \ _frame.iter = ruby_iter->iter; \ _frame.argc = 0; \ - _frame.flags = FRAME_ALLOCA; \ _frame.uniq = frame_unique++; \ ruby_frame = &_frame @@ -7750,6 +7749,20 @@ static void blk_free(data) struct BLOCK *data; { + struct FRAME *frame; + void *tmp; + + frame = data->frame.prev; + while (frame) { + tmp = frame; + frame = frame->prev; + free(tmp); + } + while (data) { + tmp = data; + data = data->prev; + free(tmp); + } } static void |