Project

General

Profile

Actions

Bug #18264

closed

TracePoint leaks memory

Added by peterzhu2118 (Peter Zhu) about 1 month ago. Updated 12 days ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:105755]

Description

GitHub PR: https://github.com/ruby/ruby/pull/5008

TracePoint leaks memory because it allocates a rb_tp_t struct without ever freeing it (it is created with RUBY_TYPED_NEVER_FREE). This is reproducible on all maintained Rubies (2.6.8, 2.7.4, 3.0.2, master) on Ubuntu 20.04.

The follow string demonstrates the issue.

100.times do
  10000.times do
    TracePoint.new(:line) {}
  end

  # Output the Resident Set Size (memory usage, in KB) of the current Ruby process
  puts `ps -o rss= -p #{$$}`
end

We can see the leak through the following graph of the Resident Set Size (RSS) comparing the branch vs. master (at commit 6b9285e8d45e88c5b014b8428520ffa2401789ad).

Actions #1

Updated by peterzhu2118 (Peter Zhu) about 1 month ago

  • Backport changed from 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN to 2.6: REQUIRED, 2.7: REQUIRED, 3.0: REQUIRED

Updated by nobu (Nobuyoshi Nakada) about 1 month ago

Good catch.
An empty function was replaced with RUBY_TYPED_NEVER_FREE at 5c1b9b38d69d, but an empty free function means that the instance has nothing others to free, and it should equal RUBY_TYPED_DEFAULT_FREE.

Actions #3

Updated by peterzhu2118 (Peter Zhu) about 1 month ago

  • Status changed from Open to Closed

Applied in changeset git|a4d5ee4f31bf3ff36c1a8c8fe3cda16aa1016b12.


[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).

Updated by nagachika (Tomoyuki Chikanaga) 30 days ago

  • Backport changed from 2.6: REQUIRED, 2.7: REQUIRED, 3.0: REQUIRED to 2.6: REQUIRED, 2.7: REQUIRED, 3.0: DONE

ruby_3_0 75e74993916e9abda1a74164fed5b59fc3d9b7ce merged revision(s) a4d5ee4f31bf3ff36c1a8c8fe3cda16aa1016b12.

Updated by usa (Usaku NAKAMURA) 12 days ago

  • Backport changed from 2.6: REQUIRED, 2.7: REQUIRED, 3.0: DONE to 2.6: REQUIRED, 2.7: DONE, 3.0: DONE

ruby_2_7 1d4e037a8011ac05b4ede8cdf8263515ba0e095e merged revision(s) a4d5ee4f31bf3ff36c1a8c8fe3cda16aa1016b12.

Actions

Also available in: Atom PDF