[ruby-core:65116] [ruby-trunk - Bug #9356] TCPSocket.new does not seem to handle INTR

From: normalperson@...
Date: 2014-09-18 19:32:35 UTC
List: ruby-core #65116
Issue #9356 has been updated by Eric Wong.


 usa@garbagecollect.jp wrote:
 > Perhaps, we should write a test that actually causes EINTR during `connect`.
 > 
 > But, when I committed r7931, there was a failure of an existing test, I guess.
 > At the moment, such failure has not been observed.
 > So, I think that there is not a big portability problem in this patch.
 
 Thanks for confirming.  Unfortunately, EINTR is not easy to trigger on a
 connect test case to localhost.  Not even -Wl,--wrap in GNU ld is useful
 for testing this, it is dependent on socket state in the kernel.

----------------------------------------
Bug #9356: TCPSocket.new does not seem to handle INTR
https://bugs.ruby-lang.org/issues/9356#change-48969

* Author: Charlie Somerville
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: -
* Backport: 1.9.3: UNKNOWN, 2.0.0: REQUIRED, 2.1: REQUIRED
----------------------------------------
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 `<main>'

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)


-- 
https://bugs.ruby-lang.org/

In This Thread