[ruby-core:68168] [Ruby trunk - Bug #10620] [Rejected] #define_singleton_method keeps object from being garbage collected

From: usa@...
Date: 2015-02-18 07:14:40 UTC
List: ruby-core #68168
Issue #10620 has been updated by Usaku NAKAMURA.

Status changed from Closed to Rejected

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

* Author: Sean Dilda
* Status: Rejected
* Priority: Normal
* Assignee: 
* 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