[#60404] is RB_GC_GUARD needed in rb_io_syswrite? — Eric Wong <normalperson@...>
I haven't gotten it to crash as-is, but it seems like we need to
4 messages
2014/02/01
[#60682] volatile usages — Eric Wong <normalperson@...>
Hi all, I went ahead and removed some use of volatile which were once
5 messages
2014/02/13
[#60794] [RFC] rearrange+pack vtm and time_object structs — Eric Wong <normalperson@...>
Extracted from addendum on top of Feature #9362 (cache-aligned objects).
4 messages
2014/02/16
[#61139] [ruby-trunk - Feature #9577] [Open] [PATCH] benchmark/driver.rb: align columns in text output — normalperson@...
Issue #9577 has been reported by Eric Wong.
3 messages
2014/02/28
[ruby-core:60866] [ruby-trunk - Bug #9356] TCPSocket.new does not seem to handle INTR
From:
normalperson@...
Date:
2014-02-19 09:33:13 UTC
List:
ruby-core #60866
Issue #9356 has been updated by Eric Wong. shugo@ruby-lang.org wrote: > Eric Wong wrote: > > > Could you describe such a race condition in detail? > > > > getsockopt(SO_ERROR) => no error > > <kernel sees disconnect> > > read/write => EPIPE, ENOTCONN, ... > > > > Since we must check all (future) read/write operations for errors > Ah, I see. However, if getsockopt() returns no error, we can know > that at least connect() succeeded, right? I'm not sure whether it's a > so-called race condition. I'm not sure if we can know for sure due to implementation differences. And even if connect() succeeded, the server could decide to disconnect right away after accept() due to overload, so probably less important. > > anyways, getsockopt(SO_ERROR) is worthless. > I don't think getsockopt(SO_ERROR) is worthless because users can know > error information sooner and more exactly than subsequent read() or > write(). The error may be seen sooner, but I think the errors are uncommon and most users will not care. They will see any error and handle it their own way. > > Maybe, but I wonder if we can just drop a lot of code... > > > > http://bogomips.org/ruby.git/patch?id=a4212dc9516f4 > > With the patch, connect() is called again even if getsockopt(SO_ERROR) returns an error, so Errno::EINVAL is raised. It's confusing behavior. Ah, I forget the outer for(;;) loop. Maybe it's better to not loop, the WAIT_IN_PROGRESS stuff is confusing... ---------------------------------------- Bug #9356: TCPSocket.new does not seem to handle INTR https://bugs.ruby-lang.org/issues/9356#change-45277 * 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 `<main>' This also appears to affect 2.0.0. 1.9.3 is unaffected. ---Files-------------------------------- socket-eintr.rb (207 Bytes) -- http://bugs.ruby-lang.org/