[ruby-core:114935] [Ruby master Bug#18553] Memory leak on compiling method call with kwargs

Issue #18553 has been updated by peterzhu2118 (Peter Zhu). Status changed from Open to Closed This was fixed in #19906, so I will close this issue. ---------------------------------------- Bug #18553: Memory leak on compiling method call with kwargs https://bugs.ruby-lang.org/issues/18553#change-104808 * Author: ibylich (Ilya Bylich) * Status: Closed * Priority: Normal * Assignee: ko1 (Koichi Sasada) * ruby -v: ruby 3.2.0dev * Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN ---------------------------------------- The following code produces a memory leak: ```ruby p(foo: 1) ``` It comes from the allocation in `compile.c`: ```c struct rb_callinfo_kwarg *kw_arg = rb_xmalloc_mul_add(len, sizeof(VALUE), sizeof(struct rb_callinfo_kwarg)); ``` Later it's packed into `struct rb_callinfo`, but `imemo_callinfo` is a GC-managed object that has no `free` calls in `obj_free` function in gc.c. [I've tried to fix it](https://github.com/ruby/ruby/pull/5488/files#diff-d1cee85c3b0e24a64519c11150...) by calling `free` on `callinfo->kwarg` and it fixed leak in `./miniruby -e 'p(foo: 1)'`, but it breaks `make install`. My addition causes a double-free error, looks like either `callinfo` or `callinfo->kwarg` is shared between multiple objects. `kwarg` field is a `const` pointer, so that's somewhat expected (I was under impression that `const` qualifier is redundant) :) I'm pretty sure old versions of Ruby are also affected by this memory leak. -- https://bugs.ruby-lang.org/

👍 пн, 2 окт. 2023 г. в 01:57, peterzhu2118 (Peter Zhu) via ruby-core < ruby-core@ml.ruby-lang.org>:
Issue #18553 has been updated by peterzhu2118 (Peter Zhu).
Status changed from Open to Closed
This was fixed in #19906, so I will close this issue.
---------------------------------------- Bug #18553: Memory leak on compiling method call with kwargs https://bugs.ruby-lang.org/issues/18553#change-104808
* Author: ibylich (Ilya Bylich) * Status: Closed * Priority: Normal * Assignee: ko1 (Koichi Sasada) * ruby -v: ruby 3.2.0dev * Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN ---------------------------------------- The following code produces a memory leak:
```ruby p(foo: 1) ```
It comes from the allocation in `compile.c`:
```c struct rb_callinfo_kwarg *kw_arg = rb_xmalloc_mul_add(len, sizeof(VALUE), sizeof(struct rb_callinfo_kwarg)); ```
Later it's packed into `struct rb_callinfo`, but `imemo_callinfo` is a GC-managed object that has no `free` calls in `obj_free` function in gc.c.
[I've tried to fix it]( https://github.com/ruby/ruby/pull/5488/files#diff-d1cee85c3b0e24a64519c11150...) by calling `free` on `callinfo->kwarg` and it fixed leak in `./miniruby -e 'p(foo: 1)'`, but it breaks `make install`. My addition causes a double-free error, looks like either `callinfo` or `callinfo->kwarg` is shared between multiple objects. `kwarg` field is a `const` pointer, so that's somewhat expected (I was under impression that `const` qualifier is redundant) :)
I'm pretty sure old versions of Ruby are also affected by this memory leak.
-- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org...
participants (2)
-
peterzhu2118 (Peter Zhu)
-
Игорь Пятчиц