[#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:60933] [ruby-trunk - Bug #9356] TCPSocket.new does not seem to handle INTR
From:
shugo@...
Date:
2014-02-21 08:17:16 UTC
List:
ruby-core #60933
Issue #9356 has been updated by Shugo Maeda.
Eric Wong wrote:
> > > However, I still prefer my v2 if possible:
> > > http://bogomips.org/ruby.git/patch?id=f5e2eb00e5
> >
> > I prefer the latter too, but is `break` missing in the case clause?
>
> I don't usually add it for the last case... Do some compilers need it?
It's OK if it's your style. I just noticed it when I was trying to add an extra case clause for ERESTART.
> > sockerrlen = (socklen_t)sizeof(sockerr);
> > if (getsockopt(fd, SOL_SOCKET, SO_ERROR, (void *)&sockerr, &sockerrlen) < 0)
> > return -1;
> > if (sockerr != 0) {
> > errno = sockerr;
>
> We should guard against sockerr setting errno to
> EINTR, ERESTART, EINPROGRESS, EALREADY, EISCONN here...
Agreed. You mean to expose only usual errors to users and to hide unusual platform-dependent errors, right?
> Here is what I think happened in Charlie's original case:
>
> connect() -> EINTR, kernel socket remembers this!
> retry connect() -> EALREADY
> wait_connectable()
> rb_wait_for_single_fd() -> success
> getsockopt(SO_ERROR), sockerr = EINTR from first connect!
> errno = sockerr -> raise :(
Charlie said Errno::ENOTCONN is raised by TCPSocket#write, not by TCPSocket.new.
I don't know why....
----------------------------------------
Bug #9356: TCPSocket.new does not seem to handle INTR
https://bugs.ruby-lang.org/issues/9356#change-45329
* 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/