[#108176] [Ruby master Bug#18679] Encoding::UndefinedConversionError: "\xE2" from ASCII-8BIT to UTF-8 — "taf2 (Todd Fisher)" <noreply@...>

Issue #18679 has been reported by taf2 (Todd Fisher).

8 messages 2022/04/05

[#108185] [Ruby master Feature#18683] Allow to create hashes with a specific capacity. — "byroot (Jean Boussier)" <noreply@...>

Issue #18683 has been reported by byroot (Jean Boussier).

13 messages 2022/04/06

[#108198] [Ruby master Feature#18685] Enumerator.product: Cartesian product of enumerators — "knu (Akinori MUSHA)" <noreply@...>

Issue #18685 has been reported by knu (Akinori MUSHA).

8 messages 2022/04/08

[#108201] [Ruby master Misc#18687] [ANN] Upgraded bugs.ruby-lang.org to Redmine 5.0 — "hsbt (Hiroshi SHIBATA)" <noreply@...>

Issue #18687 has been reported by hsbt (Hiroshi SHIBATA).

10 messages 2022/04/09

[#108216] [Ruby master Misc#18691] An option to run `make rbconfig.rb` in a different directory — "jaruga (Jun Aruga)" <noreply@...>

Issue #18691 has been reported by jaruga (Jun Aruga).

14 messages 2022/04/12

[#108225] [Ruby master Misc#18726] CI Error on c99 and c2x — "znz (Kazuhiro NISHIYAMA)" <noreply@...>

Issue #18726 has been reported by znz (Kazuhiro NISHIYAMA).

11 messages 2022/04/14

[#108235] [Ruby master Bug#18729] Method#owner and UnboundMethod#owner are incorrect after using Module#public/protected/private — "Eregon (Benoit Daloze)" <noreply@...>

Issue #18729 has been reported by Eregon (Benoit Daloze).

28 messages 2022/04/14

[#108237] [Ruby master Bug#18730] Double `return` event handling with different tracepoints — "hurricup (Alexandr Evstigneev)" <noreply@...>

Issue #18730 has been reported by hurricup (Alexandr Evstigneev).

8 messages 2022/04/14

[#108294] [Ruby master Bug#18743] Enumerator#next / peek re-use each others stacktraces — sos4nt <noreply@...>

Issue #18743 has been reported by sos4nt (Stefan Schテシテ殕er).

20 messages 2022/04/19

[#108301] [Ruby master Bug#18744] I used Jazzy to generate the doc for my iOS library, but it showed me a bug — "zhaoxinqiang (marc steven)" <noreply@...>

Issue #18744 has been reported by zhaoxinqiang (marc steven).

8 messages 2022/04/20

[ruby-core:108223] [Ruby master Misc#18725] IO#write and IO#wait_writable block for write pipe if read pipe is closed in other thread on OpenBSD

From: "jeremyevans0 (Jeremy Evans)" <noreply@...>
Date: 2022-04-13 23:20:53 UTC
List: ruby-core #108223
Issue #18725 has been reported by jeremyevans0 (Jeremy Evans).

----------------------------------------
Misc #18725: IO#write and IO#wait_writable block for write pipe if read pipe is closed in other thread on OpenBSD
https://bugs.ruby-lang.org/issues/18725

* Author: jeremyevans0 (Jeremy Evans)
* Status: Open
* Priority: Normal
----------------------------------------
I'm not sure whether this is a Ruby issue, an OpenBSD issue, or something else, but @ioquatix asked me to post this here.  The following program hangs on OpenBSD:

```ruby
require 'io/wait'
rd, wr = IO.pipe
thread_pass = ARGV[0] == 'pass'
write = ARGV[0] == 'write'
thread = Thread.new do
  longer = "0" * 1024 * 1024
  (1024 * 4).times do
    if write
      wr.write(longer)
    else
      while wr.write_nonblock(longer, :exception=>false) == :wait_writable
        thread_pass ? Thread.pass : wr.wait_writable
      end
    end
  end
  :finished
rescue => e
  e
end

sleep 1
rd.close
puts :rd_close
puts thread.value
```

This program will also hang if `write` is given as the argument, using `wr.write` instead of `wr.write_nonblock`/`wr.wait_writable`.  However, if `pass` is given as the argument, using `Thread.pass` instead of `wr.wait_writable`, the program will not hang.

From testing, the hang when called without an argument is in `wait_writable`, and the hang with a `write` argument is in `write`.

Is Ruby supposed to guarantee that a closing the read end of a pipe in one thread causes a raise of EPIPE to the write end of the pipe in a different thread if already inside `IO#write`/`IO#wait_writable`? Or is this platform-specific behavior?

This example was extracted from one of Rack's tests, which was causing non-deterministic hangs on OpenBSD.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next