summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2022-10-11 10:18:20 +1300
committerGitHub <noreply@github.com>2022-10-11 10:18:20 +1300
commit1bafa4a59b296e6ca80e32755fc84b76c3c575e5 (patch)
tree179f15f64f9eaffd62d0e69d7b667fe8e68145a7
parent1a7e7bb2d1dd507a6fdf883548633bdd14bf6854 (diff)
downloadruby-1bafa4a59b296e6ca80e32755fc84b76c3c575e5.tar.gz
Ignore failure to set nonblock mode. (#6524)
-rw-r--r--io.c4
-rw-r--r--test/ruby/test_io.rb16
2 files changed, 18 insertions, 2 deletions
diff --git a/io.c b/io.c
index 6cde02aaae..99513573d7 100644
--- a/io.c
+++ b/io.c
@@ -3571,7 +3571,7 @@ io_read_nonblock(rb_execution_context_t *ec, VALUE io, VALUE length, VALUE str,
n = read_buffered_data(RSTRING_PTR(str), len, fptr);
if (n <= 0) {
- rb_io_set_nonblock(fptr);
+ rb_fd_set_nonblock(fptr->fd);
shrinkable |= io_setstrbuf(&str, len);
iis.fptr = fptr;
iis.nonblock = 1;
@@ -3618,7 +3618,7 @@ io_write_nonblock(rb_execution_context_t *ec, VALUE io, VALUE str, VALUE ex)
if (io_fflush(fptr) < 0)
rb_sys_fail_on_write(fptr);
- rb_io_set_nonblock(fptr);
+ rb_fd_set_nonblock(fptr->fd);
n = write(fptr->fd, RSTRING_PTR(str), RSTRING_LEN(str));
RB_GC_GUARD(str);
diff --git a/test/ruby/test_io.rb b/test/ruby/test_io.rb
index f4ebccf9df..0c8beb2f95 100644
--- a/test/ruby/test_io.rb
+++ b/test/ruby/test_io.rb
@@ -1597,6 +1597,22 @@ class TestIO < Test::Unit::TestCase
end
end
+ def test_read_nonblock_file
+ make_tempfile do |path|
+ File.open(path, 'r') do |file|
+ file.read_nonblock(4)
+ end
+ end
+ end
+
+ def test_write_nonblock_file
+ make_tempfile do |path|
+ File.open(path, 'w') do |file|
+ file.write_nonblock("Ruby")
+ end
+ end
+ end
+
def test_write_nonblock_simple_no_exceptions
pipe(proc do |w|
w.write_nonblock('1', exception: false)