[前][次][番号順一覧][スレッド一覧]

ruby-changes:16610

From: yugui <ko1@a...>
Date: Sat, 10 Jul 2010 13:06:24 +0900 (JST)
Subject: [ruby-changes:16610] Ruby:r28604 (ruby_1_9_2): merges r28561 from trunk into ruby_1_9_2.

yugui	2010-07-10 13:06:05 +0900 (Sat, 10 Jul 2010)

  New Revision: 28604

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=28604

  Log:
    merges r28561 from trunk into ruby_1_9_2.
    --
    * missing/close.c: ignore ECONNRESET.
      FreeBSD wrongly sets ECONNRESET on close(2) and
      it causes false-negative exceptions. [ruby-dev:41778]
    
    * configure.in: ditto.

  Added files:
    branches/ruby_1_9_2/missing/close.c
  Modified files:
    branches/ruby_1_9_2/ChangeLog
    branches/ruby_1_9_2/configure.in
    branches/ruby_1_9_2/include/ruby/ruby.h

Index: ruby_1_9_2/include/ruby/ruby.h
===================================================================
--- ruby_1_9_2/include/ruby/ruby.h	(revision 28603)
+++ ruby_1_9_2/include/ruby/ruby.h	(revision 28604)
@@ -1421,6 +1421,17 @@
 #define snprintf ruby_snprintf
 #define vsnprintf ruby_vsnprintf
 
+#ifdef __FreeBSD__
+#undef getpeername
+#define getpeername ruby_getpeername
+#undef getsockname
+#define getsockname ruby_getsockname
+#undef shutdown
+#define shutdown ruby_shutdown
+#undef close
+#define close ruby_close
+#endif
+
 #if defined(__cplusplus)
 #if 0
 { /* satisfy cc-mode */
Index: ruby_1_9_2/configure.in
===================================================================
--- ruby_1_9_2/configure.in	(revision 28603)
+++ ruby_1_9_2/configure.in	(revision 28604)
@@ -921,6 +921,10 @@
 		AC_DEFINE(BROKEN_SETREGID, 1)
                 ac_cv_sizeof_rlim_t=8],
 [freebsd*], [	LIBS="-lm $LIBS"
+		ac_cv_func_getpeername=no
+		ac_cv_func_getsockname=no
+		ac_cv_func_shutdown=no
+		ac_cv_func_close=no
 		],
 [dragonfly*], [	LIBS="-lm $LIBS"
 		],
@@ -1114,6 +1118,7 @@
 	rb_cv_broken_glibc_ia64_erfc=no)])
 AS_CASE([$rb_cv_broken_glibc_ia64_erfc],[yes],[ac_cv_func_erf=no])
 
+AS_CASE(["$target_os"],[freebsd],[],[AC_REPLACE_FUNCS(close)])
 AC_REPLACE_FUNCS(dup2 memmove strerror\
 		 strchr strstr crypt flock\
 		 isnan finite isinf hypot acosh erf tgamma lgamma_r cbrt \
@@ -1135,7 +1140,7 @@
 	      setitimer setruid seteuid setreuid setresuid setproctitle socketpair\
 	      setrgid setegid setregid setresgid issetugid pause lchown lchmod\
 	      getpgrp setpgrp getpgid setpgid initgroups getgroups setgroups\
-	      getpriority getrlimit setrlimit sysconf \
+	      getpriority getrlimit setrlimit sysconf close\
 	      dlopen sigprocmask sigaction sigsetjmp _setjmp _longjmp\
 	      setsid telldir seekdir fchmod cosh sinh tanh log2 round\
 	      setuid setgid daemon select_large_fdset setenv unsetenv\
Index: ruby_1_9_2/ChangeLog
===================================================================
--- ruby_1_9_2/ChangeLog	(revision 28603)
+++ ruby_1_9_2/ChangeLog	(revision 28604)
@@ -1,3 +1,11 @@
+Wed Jul  7 10:26:20 2010  NARUSE, Yui  <naruse@r...>
+
+	* missing/close.c: ignore ECONNRESET.
+	  FreeBSD wrongly sets ECONNRESET on close(2) and
+	  it causes false-negative exceptions. [ruby-dev:41778]
+
+	* configure.in: ditto.
+
 Sun Jul  4 17:13:14 2010  Nobuyoshi Nakada  <nobu@r...>
 
 	* io.c (swallow, prepare_getline_args, rb_io_getline_1): fix for
Index: ruby_1_9_2/missing/close.c
===================================================================
--- ruby_1_9_2/missing/close.c	(revision 0)
+++ ruby_1_9_2/missing/close.c	(revision 28604)
@@ -0,0 +1,55 @@
+/* Ignore ECONNRESET of FreeBSD */
+#include <errno.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+
+int
+ruby_getpeername(int s, struct sockaddr * name,
+         socklen_t * namelen)
+{
+    errno = 0;
+    s = getpeername(s, name, namelen);
+    if (errno == ECONNRESET) {
+	errno = 0;
+	s = 0;
+    }
+    return s;
+}
+
+int
+ruby_getsockname(int s, struct sockaddr * name,
+         socklen_t * namelen)
+{
+    errno = 0;
+    s = getsockname(s, name, namelen);
+    if (errno == ECONNRESET) {
+	errno = 0;
+	s = 0;
+    }
+    return s;
+}
+
+int
+ruby_shutdown(int s, int how)
+{
+    errno = 0;
+    s = shutdown(s, how);
+    if (errno == ECONNRESET) {
+	errno = 0;
+	s = 0;
+    }
+    return s;
+}
+
+int
+ruby_close(int s)
+{
+    errno = 0;
+    s = close(s);
+    if (errno == ECONNRESET) {
+	errno = 0;
+	s = 0;
+    }
+    return s;
+}

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]