[#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:60861] Re: [ruby-trunk - Bug #9356] TCPSocket.new does not seem to handle INTR
From:
Eric Wong <normalperson@...>
Date:
2014-02-19 08:12:11 UTC
List:
ruby-core #60861
shugo@ruby-lang.org wrote:
> Eric Wong wrote:
> > OK. I wonder if we should even use getsockopt(SO_ERROR) at all.
> >
> > I know there's much literature which recommends it, but any error check
> > in this way is racy. Better to let any subsequent
> > write/read/send/recv/etc error out.
>
> 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
anyways, getsockopt(SO_ERROR) is worthless.
> I don't see a race condition on FreeBSD 10.
>
> The problem I've seen is that rb_wait_for_single_fd() returns RB_WAITFD_OUT, and getsockopt() with SO_ERROR doesn't return any error (this is an expected behavior when the socket is connected), and Ruby goes in an infinite loop.
>
> This problem was introduced by r31424, and usa is not guilty at least for the problem I've seen.
>
> How about to fix the code as follows?
>
> if (sockerr == 0) {
> if (revents & RB_WAITFD_OUT) {
> break;
> }
> else {
> continue; /* control is reached here on winsock? */
> }
> }
Maybe, but I wonder if we can just drop a lot of code...
http://bogomips.org/ruby.git/patch?id=a4212dc9516f4