Skip to content

Commit 139d06c

Browse files
committed
* ext/socket/init.c (wait_connectable): break if the socket is
writable to avoid infinite loops on FreeBSD and other platforms which conforms to SUSv3. This problem cannot be reproduced with loopback interfaces, so it's hard to write test code. rsock_connect() and wait_connectable() are overly complicated, so they should be refactored, but I commit this fix as a workaround for the release of Ruby 1.9.3 scheduled on Feb 24. [ruby-core:60940] [Bug ruby#9547] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45084 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent 6337bf7 commit 139d06c

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

ChangeLog

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
Fri Feb 21 23:47:24 2014 Shugo Maeda <shugo@ruby-lang.org>
2+
3+
* ext/socket/init.c (wait_connectable): break if the socket is
4+
writable to avoid infinite loops on FreeBSD and other platforms
5+
which conforms to SUSv3. This problem cannot be reproduced with
6+
loopback interfaces, so it's hard to write test code.
7+
rsock_connect() and wait_connectable() are overly complicated, so
8+
they should be refactored, but I commit this fix as a workaround
9+
for the release of Ruby 1.9.3 scheduled on Feb 24.
10+
[ruby-core:60940] [Bug #9547]
11+
112
Fri Feb 21 23:03:39 2014 NARUSE, Yui <naruse@ruby-lang.org>
213

314
* tool/redmine-backporter.rb: added to handle redmine tickets.

ext/socket/init.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -364,8 +364,12 @@ wait_connectable(int fd)
364364
*/
365365
if (ret < 0)
366366
break;
367-
if (sockerr == 0)
368-
continue; /* workaround for winsock */
367+
if (sockerr == 0) {
368+
if (revents & RB_WAITFD_OUT)
369+
break;
370+
else
371+
continue; /* workaround for winsock */
372+
}
369373

370374
/* BSD and Linux use sockerr. */
371375
errno = sockerr;

0 commit comments

Comments
 (0)