epollexclusive: handle future rb_io_t deprecation
commit63c85c4282d15e22bd32a905883d2d0e149619d1
authorEric Wong <bofh@yhbt.net>
Sun, 11 Jun 2023 22:41:21 +0000 (11 22:41 +0000)
committerEW <bofh@yhbt.net>
Tue, 20 Jun 2023 10:37:56 +0000 (20 10:37 +0000)
tree3ebbb0afd042aa43da99a982b1a0b97a5540ff55
parentec30bf29ce5a37d7364c687bec05c8410375f2c9
epollexclusive: handle future rb_io_t deprecation

It looks like Ruby 3.3+ will hide rb_io_t internals and
get rid of the venerable `GetOpenFile' macro in favor of
`rb_io_descriptor'.  `rb_io_descriptor' has been public
API since Ruby 3.1 and should be safe to use, and
is necessary for `raindrops' (a dependency of ours):

  https://yhbt.net/raindrops-public/20230609104805.39022-1-samuel.williams@oriontransfer.co.nz/
  https://bugs.ruby-lang.org/issues/19057#note-17

We'll also avoid an unnecessary call to `rb_io_get_io' in
`get_readers' since `epio' (aka `self') can only be of
the Unicorn::Waiter IO subclass.  However, we must still use
`rb_io_get_io' when handling non-self args in `prep_readers'.
ext/unicorn_http/epollexclusive.h
ext/unicorn_http/extconf.rb