Issue #18264 has been updated by nobu (Nobuyoshi Nakada).


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

----------------------------------------
Bug #18264: TracePoint leaks memory
https://bugs.ruby-lang.org/issues/18264#change-94319

* Author: peterzhu2118 (Peter Zhu)
* Status: Open
* Priority: Normal
* Backport: 2.6: REQUIRED, 2.7: REQUIRED, 3.0: REQUIRED
----------------------------------------
# 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.

```ruby
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).

![](https://user-images.githubusercontent.com/15860699/138502310-007bd725-d364-4be4-b128-ebdb859b8613.png)




-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>