From 1d4e037a8011ac05b4ede8cdf8263515ba0e095e Mon Sep 17 00:00:00 2001 From: NAKAMURA Usaku Date: Wed, 24 Nov 2021 19:37:50 +0900 Subject: merge revision(s) a4d5ee4f31bf3ff36c1a8c8fe3cda16aa1016b12: [Backport #18264] [Bug #18264] Fix memory leak in TracePoint TracePoint leaks memory because it allocates a `rb_tp_t` struct without ever freeing it (it is created with `RUBY_TYPED_NEVER_FREE`). --- test/ruby/test_settracefunc.rb | 10 ++++++++++ vm_trace.c | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) --- test/ruby/test_settracefunc.rb | 10 ++++++++++ version.h | 2 +- vm_trace.c | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/test/ruby/test_settracefunc.rb b/test/ruby/test_settracefunc.rb index e16a4fc01e..0c41f247be 100644 --- a/test/ruby/test_settracefunc.rb +++ b/test/ruby/test_settracefunc.rb @@ -555,6 +555,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/version.h b/version.h index 38270b4dee..315eda1376 100644 --- a/version.h +++ b/version.h @@ -2,7 +2,7 @@ # define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR #define RUBY_VERSION_TEENY 5 #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR -#define RUBY_PATCHLEVEL 200 +#define RUBY_PATCHLEVEL 201 #define RUBY_RELEASE_YEAR 2021 #define RUBY_RELEASE_MONTH 11 diff --git a/vm_trace.c b/vm_trace.c index 241b929671..c8ac47ef9c 100644 --- a/vm_trace.c +++ b/vm_trace.c @@ -726,7 +726,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 }; -- cgit v1.2.3