Ruby: changing deprecated rb_cData to rb_cObject.

Ruby 3.0 deprecated rb_cData with the intention to remove it in release 3.1.
This commit changes references of rb_cData to rb_cObject.  This was done so we
can support distributions that package Ruby 3.0, such as Fedora 34.

We also need to call rb_undef_alloc_func because we're no longer deriving from
rb_cData.  This prevents unnecessary allocations.

See:
https://docs.ruby-lang.org/en/3.0.0/doc/extension_rdoc.html

"It is recommended that klass derives from a special class called Data
(rb_cData) but not from Object or other ordinal classes.  If it doesn't,
you have to call rb_undef_alloc_func(klass)."
This commit is contained in:
Oisin Canty 2021-05-18 10:14:43 +00:00
parent 19dfeba86b
commit ead6ed999a
2 changed files with 12 additions and 2 deletions

View file

@ -50,6 +50,12 @@ points on a per-request basis during static file serving.
</para>
</change>
<change type="feature">
<para>
compatibility with Ruby 3.0.
</para>
</change>
<change type="bugfix">
<para>
a segmentation fault might have occurred in the PHP module if

View file

@ -25,7 +25,9 @@ nxt_ruby_stream_io_input_init(void)
{
VALUE stream_io;
stream_io = rb_define_class("NGINX_Unit_Stream_IO_Read", rb_cData);
stream_io = rb_define_class("NGINX_Unit_Stream_IO_Read", rb_cObject);
rb_undef_alloc_func(stream_io);
rb_gc_register_address(&stream_io);
@ -46,7 +48,9 @@ nxt_ruby_stream_io_error_init(void)
{
VALUE stream_io;
stream_io = rb_define_class("NGINX_Unit_Stream_IO_Error", rb_cData);
stream_io = rb_define_class("NGINX_Unit_Stream_IO_Error", rb_cObject);
rb_undef_alloc_func(stream_io);
rb_gc_register_address(&stream_io);