[ruby-core:66959] [ruby-trunk - Bug #10620] [Open] #define_singleton_method keeps object from being garbage collected

From: sean@...
Date: 2014-12-19 00:45:39 UTC
List: ruby-core #66959
Issue #10620 has been reported by Sean Dilda.

----------------------------------------
Bug #10620: #define_singleton_method keeps object from being garbage collected
https://bugs.ruby-lang.org/issues/10620

* Author: Sean Dilda
* Status: Open
* Priority: Normal
* Assignee: 
* Category: core
* Target version: 
* ruby -v: 2.1.5
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
After using #define_singleton_method on an object, the object is never garbage collected

Sample code:
#!/usr/bin/env ruby

obj = Object.new
obj_id = obj.object_id
obj = nil

GC.start
GC.start
GC.start
GC.start
begin
  ObjectSpace._id2ref obj_id
  puts "GC failed, object still exists"
rescue RangeError
  puts "GC worked"
end


obj = Object.new
obj.define_singleton_method(:f) { "F" }
obj_id = obj.object_id
obj = nil

GC.start
GC.start
GC.start
GC.start
begin
  ObjectSpace._id2ref obj_id
  puts "GC failed, object still exists"
rescue RangeError
  puts "GC worked"
end


This outputted:
GC worked
GC failed, object still exists


The object without the singleton method was cleaned up properly, the object with defined_singleton_method used never got cleaned up.



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

In This Thread

Prev Next