[ruby-core:105096] [Ruby master Bug#17394] TCPServer is not thread safe on win32
From:
"hsbt (Hiroshi SHIBATA)" <noreply@...>
Date:
2021-08-31 11:45:48 UTC
List:
ruby-core #105096
Issue #17394 has been updated by hsbt (Hiroshi SHIBATA).
Backport changed from 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN to 2.6: REQUIRED, 2.7: REQUIRED, 3.0: REQUIRED
* https://github.com/ruby/ruby/pull/4218
* https://github.com/ruby/ruby/pull/4219
----------------------------------------
Bug #17394: TCPServer is not thread safe on win32
https://bugs.ruby-lang.org/issues/17394#change-93506
* Author: puchuu (Andrew Aladjev)
* Status: Closed
* Priority: Normal
* ruby -v: 2.7.1
* Backport: 2.6: REQUIRED, 2.7: REQUIRED, 3.0: REQUIRED
----------------------------------------
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>