Skip to content

Commit 201f7be

Browse files
committed
Add C extension spec for rb_undefine_finalizer
1 parent 07315c1 commit 201f7be

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

optional/capi/ext/finalizer_spec.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,15 @@ static VALUE define_finalizer(VALUE self, VALUE obj, VALUE finalizer) {
99
return rb_define_finalizer(obj, finalizer);
1010
}
1111

12+
static VALUE undefine_finalizer(VALUE self, VALUE obj) {
13+
return rb_undefine_finalizer(obj);
14+
}
15+
1216
void Init_finalizer_spec(void) {
1317
VALUE cls = rb_define_class("CApiFinalizerSpecs", rb_cObject);
1418

1519
rb_define_method(cls, "rb_define_finalizer", define_finalizer, 2);
20+
rb_define_method(cls, "rb_undefine_finalizer", undefine_finalizer, 1);
1621
}
1722

1823
#ifdef __cplusplus

optional/capi/finalizer_spec.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,21 @@
2020
ruby_exe(code).should == "finalizer run\n"
2121
end
2222
end
23+
24+
describe "rb_undefine_finalizer" do
25+
ruby_bug "#20981", "3.4.0"..."3.4.2" do
26+
it "removes finalizers from the object" do
27+
code = <<~RUBY
28+
require #{extension_path.dump}
29+
30+
obj = Object.new
31+
finalizer = Proc.new { puts "finalizer run" }
32+
ObjectSpace.define_finalizer(obj, finalizer)
33+
CApiFinalizerSpecs.new.rb_undefine_finalizer(obj)
34+
RUBY
35+
36+
ruby_exe(code).should.empty?
37+
end
38+
end
39+
end
2340
end

0 commit comments

Comments
 (0)