From: "usa (Usaku NAKAMURA)" Date: 2021-11-24T10:08:09+00:00 Subject: [ruby-core:106253] [Ruby master Bug#17394] TCPServer is not thread safe on win32 Issue #17394 has been updated by usa (Usaku NAKAMURA). Backport changed from 2.6: REQUIRED, 2.7: REQUIRED, 3.0: DONE to 2.6: REQUIRED, 2.7: DONE, 3.0: DONE Backported into ruby_2_7 with resolving conflict :) ---------------------------------------- Bug #17394: TCPServer is not thread safe on win32 https://bugs.ruby-lang.org/issues/17394#change-94873 * Author: puchuu (Andrew Aladjev) * Status: Closed * Priority: Normal * ruby -v: 2.7.1 * Backport: 2.6: REQUIRED, 2.7: DONE, 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: