1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* 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 #9547]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45084 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
shugo 2014-02-21 14:59:44 +00:00
parent 6337bf7588
commit 139d06c34f
2 changed files with 17 additions and 2 deletions

View file

@ -1,3 +1,14 @@
Fri Feb 21 23:47:24 2014 Shugo Maeda <shugo@ruby-lang.org>
* 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 #9547]
Fri Feb 21 23:03:39 2014 NARUSE, Yui <naruse@ruby-lang.org>
* tool/redmine-backporter.rb: added to handle redmine tickets.

View file

@ -364,8 +364,12 @@ wait_connectable(int fd)
*/
if (ret < 0)
break;
if (sockerr == 0)
continue; /* workaround for winsock */
if (sockerr == 0) {
if (revents & RB_WAITFD_OUT)
break;
else
continue; /* workaround for winsock */
}
/* BSD and Linux use sockerr. */
errno = sockerr;