From: shugo@... Date: 2014-02-21T15:06:30+00:00 Subject: [ruby-core:60948] [ruby-trunk - Bug #9356] TCPSocket.new does not seem to handle INTR Issue #9356 has been updated by Shugo Maeda. Shugo Maeda wrote: > Shugo Maeda wrote: > > On FreeBSD 10, Errno::ENOTCONN isn't raised, but Ruby goes in an infinite loop because getsockopt(2) in wait_connectable() sets sockerr to 0. > > Can I commit the attached minimal fix as a workaround for this infinite loop bug? > > Ruby 1.9.3 release is scheduled on Feb 24, and this is the last chance to fix normal bugs. > It's hard to estimate the impact of Eric's patch by then. I talked with Naruse-san and Nakamura-san, and have created #9547 and have committed the workaround. ---------------------------------------- Bug #9356: TCPSocket.new does not seem to handle INTR https://bugs.ruby-lang.org/issues/9356#change-45348 * Author: Charlie Somerville * Status: Open * Priority: Normal * Assignee: * Category: * Target version: * ruby -v: - * Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- TCPSocket.new does not seem to handle EINTR properly. In the attached test script, I try to open a TCP connection to my server and make an HTTP request while a background thread continually sends a signal to the process. This causes the #write call to fail with: x.rb:13:in `write': Socket is not connected (Errno::ENOTCONN) from x.rb:13:in `
' This also appears to affect 2.0.0. 1.9.3 is unaffected. ---Files-------------------------------- socket-eintr.rb (207 Bytes) wait_connectable_infinite_loop_minimal_fix.diff (478 Bytes) -- http://bugs.ruby-lang.org/