Project

General

Profile

Actions

Bug #19906

closed

fix kwarg memory leak

Added by HParker (Adam Hess) about 1 year ago. Updated about 1 year ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:114925]

Description

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

ci info tracks kwargs and which are shared across aliases

30.times do
  100_000.times do
    def foo(k:); yield; end
    alias bar foo

    undef foo
  end
  puts `ps -o rss= -p #{$$}`
end

before:

 30364
 45120
 59700
 73932
 88512
102680
116884
130884
145308
159688
174468
188680
203016
216908
231568
246096
260592
274900
289168
303420
317620
331956
346148
360708
374880
389172
403472
417824
432016
446040
460196
474604
489152
503248
517504
531944
546228
560520
574760
589108

after:

  8760
  8940
  9156
  9540
  9548
  9548
  9548
  9548
  9548
  9548
  9548
  9548
  9548
  9548
  9548
  9548
  9548
  9548
  9548
  9548
  9556
  9564
  9564
  9564
  9564
  9564
  9564
  9564
  9564
  9564
  9564
  9564
  9564
  9576
  9744
  9744
  9744
  9744
  9744
  9936

Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #18553: Memory leak on compiling method call with kwargsClosedko1 (Koichi Sasada)Actions

Updated by nobu (Nobuyoshi Nakada) about 1 year ago

I can't reproduce it on {arm64,x86_64}-{darwin,linux}.

Actions #2

Updated by HParker (Adam Hess) about 1 year ago

  • Status changed from Open to Closed

Applied in changeset git|c74dc8b4af4ef1b32f65587f083fbeba4ca186fa.


Use reference counting to avoid memory leak in kwargs

Tracks other callinfo that references the same kwargs and frees them when all references are cleared.

[bug #19906]

Co-authored-by: Peter Zhu

Updated by HParker (Adam Hess) about 1 year ago

Updated reproduction script:

Maybe this is a better reproduction?

a = RubyVM::InstructionSequence.compile("foo(bar: :baz)").to_binary

10.times do
  500_000.times do
    RubyVM::InstructionSequence.load_from_binary(a)
  end

  puts `ps -o rss= -p #{$$}`
end

before:

 20244
 31760
 40572
 48468
 55324
 63712
 71260
 79552
 87224
 94492

after:

 13156
 16072
 16080
 16620
 16620
 16620
 16628
 16672
 16672
 16672
Actions #4

Updated by peterzhu2118 (Peter Zhu) about 1 year ago

  • Related to Bug #18553: Memory leak on compiling method call with kwargs added
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0