From: "nagachika (Tomoyuki Chikanaga)" Date: 2021-09-05T02:44:07+00:00 Subject: [ruby-core:105149] [Ruby master Bug#17394] TCPServer is not thread safe on win32 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: