Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit fd54599

Browse files
chrisseatoneregon
authored andcommitted
Warn in verbose mode on defining a finalizer that captures the object
[Feature #15974] Closes: ruby/ruby#2264
1 parent aa6a9a2 commit fd54599

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

core/objectspace/define_finalizer_spec.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,4 +65,30 @@ def scoped
6565

6666
ruby_exe(code).lines.sort.should == ["finalized1\n", "finalized2\n"]
6767
end
68+
69+
it "warns in verbose mode if it is self-referencing" do
70+
code = <<-RUBY
71+
obj = "Test"
72+
handler = Proc.new { puts "finalized" }
73+
ObjectSpace.define_finalizer(obj, handler)
74+
exit 0
75+
RUBY
76+
77+
ruby_exe(code, :options => "-w", :args => "2>&1").should include("warning: object is reachable from finalizer - it may never be run")
78+
end
79+
80+
it "warns in verbose mode if it is indirectly self-referencing" do
81+
code = <<-RUBY
82+
def scoped(indirect)
83+
Proc.new { puts "finalized" }
84+
end
85+
obj = "Test"
86+
indirect = [obj]
87+
handler = scoped(indirect)
88+
ObjectSpace.define_finalizer(obj, handler)
89+
exit 0
90+
RUBY
91+
92+
ruby_exe(code, :options => "-w", :args => "2>&1").should include("warning: object is reachable from finalizer - it may never be run")
93+
end
6894
end

0 commit comments

Comments
 (0)