diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb index a856646fe5..cc2b1f8ba2 100644 --- a/ext/openssl/extconf.rb +++ b/ext/openssl/extconf.rb @@ -27,7 +27,6 @@ if with_config("debug") or enable_config("debug") end have_func("rb_io_maybe_wait") # Ruby 3.1 -have_func("rb_io_timeout") # Ruby 3.2 Logging::message "=== Checking for system dependent stuff... ===\n" have_library("nsl", "t_open") diff --git a/ext/openssl/ossl_ssl.c b/ext/openssl/ossl_ssl.c index 605591efe5..319ba5840e 100644 --- a/ext/openssl/ossl_ssl.c +++ b/ext/openssl/ossl_ssl.c @@ -1641,21 +1641,15 @@ no_exception_p(VALUE opts) return 0; } -inline static -VALUE io_timeout() -{ -#ifdef HAVE_RB_IO_TIMEOUT - return Qundef; -#else - return Qnil; +#ifndef RB_IO_TIMEOUT_DEFAULT +#define RB_IO_TIMEOUT_DEFAULT Qnil #endif -} static void io_wait_writable(rb_io_t *fptr) { #ifdef HAVE_RB_IO_MAYBE_WAIT - rb_io_maybe_wait_writable(errno, fptr->self, io_timeout()); + rb_io_maybe_wait_writable(errno, fptr->self, RB_IO_TIMEOUT_DEFAULT); #else rb_io_wait_writable(fptr->fd); #endif @@ -1665,7 +1659,7 @@ static void io_wait_readable(rb_io_t *fptr) { #ifdef HAVE_RB_IO_MAYBE_WAIT - rb_io_maybe_wait_readable(errno, fptr->self, io_timeout()); + rb_io_maybe_wait_readable(errno, fptr->self, RB_IO_TIMEOUT_DEFAULT); #else rb_io_wait_readable(fptr->fd); #endif diff --git a/include/ruby/io.h b/include/ruby/io.h index b91ecd00cb..bb3bb9cd53 100644 --- a/include/ruby/io.h +++ b/include/ruby/io.h @@ -58,6 +58,9 @@ // IO#wait, IO#wait_readable, IO#wait_writable, IO#wait_priority are defined by this implementation. #define RUBY_IO_WAIT_METHODS +// Used as the default timeout argument to `rb_io_wait` to use the `IO#timeout` value. +#define RUBY_IO_TIMEOUT_DEFAULT Qundef + RBIMPL_SYMBOL_EXPORT_BEGIN() struct stat; @@ -884,6 +887,8 @@ VALUE rb_io_set_timeout(VALUE io, VALUE timeout); * @param[in] io An IO object to wait. * @param[in] events See above. * @param[in] timeout Time, or numeric seconds since UNIX epoch. + * If Qnil, wait forever. If Qundef, use the + * default timeout. * @exception rb_eIOError `io` is not open. * @exception rb_eRangeError `timeout` is out of range. * @exception rb_eSystemCallError `select(2)` failed for some reason.