summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-08-02 08:52:53 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-08-02 08:52:53 +0000
commitdd028b39ed564a3b785a8400979149c919f44446 (patch)
treea40c06e5833079f840ea6d3864a9c0fa84832dae
parent05ad2da3133ad49b865542791729989b70fbbce7 (diff)
downloadruby-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
-rw-r--r--ChangeLog4
-rw-r--r--eval.c15
2 files changed, 18 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index ee952f7f3..00b194af8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Mon Aug 2 17:40:44 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (blk_free): fixed serious memory leak. [ruby-dev:24013]
+
Mon Aug 2 11:53:06 2004 Dave Thomas <dave@pragprog.com>
* lib/rdoc/code_objects.rb (RDoc::Context::find_symbol): Fix infinite recursion
diff --git a/eval.c b/eval.c
index bfeeac706..366af113e 100644
--- a/eval.c
+++ b/eval.c
@@ -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