summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/ruby/test_settracefunc.rb10
-rw-r--r--vm_trace.c2
2 files changed, 11 insertions, 1 deletions
diff --git a/test/ruby/test_settracefunc.rb b/test/ruby/test_settracefunc.rb
index 88488aef5c..c6955467c4 100644
--- a/test/ruby/test_settracefunc.rb
+++ b/test/ruby/test_settracefunc.rb
@@ -564,6 +564,16 @@ class TestSetTraceFunc < Test::Unit::TestCase
}
end
+ # Bug #18264
+ def test_tracpoint_memory_leak
+ assert_no_memory_leak([], <<-PREP, <<-CODE, rss: true)
+code = proc { TracePoint.new(:line) { } }
+1_000.times(&code)
+PREP
+1_000_000.times(&code)
+CODE
+ end
+
def trace_by_set_trace_func
events = []
trace = nil
diff --git a/vm_trace.c b/vm_trace.c
index b22b2ceb34..63e4c3ac1a 100644
--- a/vm_trace.c
+++ b/vm_trace.c
@@ -748,7 +748,7 @@ tp_memsize(const void *ptr)
static const rb_data_type_t tp_data_type = {
"tracepoint",
- {tp_mark, RUBY_TYPED_NEVER_FREE, tp_memsize,},
+ {tp_mark, RUBY_TYPED_DEFAULT_FREE, tp_memsize,},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY
};