[#105450] [Ruby master Feature#18228] Add a `timeout` option to `IO.copy_stream` — "byroot (Jean Boussier)" <noreply@...>
SXNzdWUgIzE4MjI4IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGJ5cm9vdCAoSmVhbiBCb3Vzc2llciku
11 messages
2021/09/27
[ruby-core:105149] [Ruby master Bug#17394] TCPServer is not thread safe on win32
From:
"nagachika (Tomoyuki Chikanaga)" <noreply@...>
Date:
2021-09-05 02:44:07 UTC
List:
ruby-core #105149
Issue #17394 has been updated by nagachika (Tomoyuki Chikanaga).
Backport changed from 2.6: REQUIRED, 2.7: REQUIRED, 3.0: REQUIRED to 2.6: REQUIRED, 2.7: REQUIRED, 3.0: DONE
Thank you for preparing backport PRs including bump a patchlevel.
I resolve conflict and merge into ruby_3_0 at 261a0e0e4a3202ca004eddc3cc2cefc9e8d0a90a.
----------------------------------------
Bug #17394: TCPServer is not thread safe on win32
https://bugs.ruby-lang.org/issues/17394#change-93556
* Author: puchuu (Andrew Aladjev)
* Status: Closed
* Priority: Normal
* ruby -v: 2.7.1
* Backport: 2.6: REQUIRED, 2.7: REQUIRED, 3.0: DONE
----------------------------------------
Hello, it looks like win32 version of TCPServer is not thread safe. I've extracted the following code from project:
``` ruby
require "socket"
require "parallel"
::Parallel.each(1..2, :in_threads => 2) do
::TCPServer.open 0 do |server|
thread = ::Thread.new { server.accept.close }
::TCPSocket.open "localhost", server.addr[1]
thread.join
end
end
```
It returns:
```
in `accept': Bad file descriptor - not a socket file descriptor (Errno::EBADF)
```
You can fix this code by using `:in_threads => 1`. This is unique windows issue: GNU/Linux, FreeBSD and OSX works perfect. I think something is wrong in `win32` folder of ruby source code.
Can you please assign this issue to the developer familiar with `win32` folder? Thank you.
---Files--------------------------------
Screenshot_20201215_020316.png (11.4 KB)
4220.patch (7.68 KB)
--
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>