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

ruby-changes:9953

From: akr <ko1@a...>
Date: Tue, 13 Jan 2009 21:41:32 +0900 (JST)
Subject: [ruby-changes:9953] Ruby:r21494 (trunk): * ext/socket/socket.c (rb_getaddrinfo): use getaddrinfo with GVL if

akr	2009-01-13 21:41:12 +0900 (Tue, 13 Jan 2009)

  New Revision: 21494

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

  Log:
    * ext/socket/socket.c (rb_getaddrinfo): use getaddrinfo with GVL if
      getaddrinfo.c/getnameinfo.c is used.  They are not thread safe
      because gethostbyname/gethostbyaddr is used.
      (rb_getnameinfo): ditto.
    * extconf.rb: define GETADDRINFO_EMU if getaddrinfo.c/getnameinfo.c is
      used.

  Modified files:
    trunk/ChangeLog
    trunk/ext/socket/extconf.rb
    trunk/ext/socket/socket.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 21493)
+++ ChangeLog	(revision 21494)
@@ -1,3 +1,13 @@
+Tue Jan 13 21:38:07 2009  Tanaka Akira  <akr@f...>
+
+	* ext/socket/socket.c (rb_getaddrinfo): use getaddrinfo with GVL if
+	  getaddrinfo.c/getnameinfo.c is used.  They are not thread safe
+	  because gethostbyname/gethostbyaddr is used.
+	  (rb_getnameinfo): ditto.
+
+	* extconf.rb: define GETADDRINFO_EMU if getaddrinfo.c/getnameinfo.c is
+	  used.
+
 Tue Jan 13 21:28:14 2009  Yuki Sonoda (Yugui)  <yugui@y...>
 
 	* object.c (rb_obj_not_match): rdoc.
Index: ext/socket/extconf.rb
===================================================================
--- ext/socket/extconf.rb	(revision 21493)
+++ ext/socket/extconf.rb	(revision 21494)
@@ -251,6 +251,7 @@
   $CPPFLAGS="-I. "+$CPPFLAGS
   $objs += ["getaddrinfo.#{$OBJEXT}"]
   $objs += ["getnameinfo.#{$OBJEXT}"]
+  $defs << "-DGETADDRINFO_EMU"
   have_func("inet_ntop") or have_func("inet_ntoa")
   have_func("inet_pton") or have_func("inet_aton")
   have_func("getservbyport")
Index: ext/socket/socket.c
===================================================================
--- ext/socket/socket.c	(revision 21493)
+++ ext/socket/socket.c	(revision 21494)
@@ -238,6 +238,7 @@
 #define close closesocket
 #endif
 
+#ifndef GETADDRINFO_EMU
 struct getaddrinfo_arg
 {
     const char *node;
@@ -253,12 +254,16 @@
     return getaddrinfo(ptr->node, ptr->service,
                        ptr->hints, ptr->res);
 }
+#endif
 
 static int
 rb_getaddrinfo(const char *node, const char *service,
                const struct addrinfo *hints,
                struct addrinfo **res)
 {
+#ifdef GETADDRINFO_EMU
+    return getaddrinfo(node, service, hints, res);
+#else
     struct getaddrinfo_arg arg;
     int ret;
     arg.node = node;
@@ -267,8 +272,10 @@
     arg.res = res;
     ret = BLOCKING_REGION(nogvl_getaddrinfo, &arg);
     return ret;
+#endif
 }
 
+#ifndef GETADDRINFO_EMU
 struct getnameinfo_arg
 {
     const struct sockaddr *sa;
@@ -289,12 +296,16 @@
                        ptr->serv, ptr->servlen,
                        ptr->flags);
 }
+#endif
 
 static int
 rb_getnameinfo(const struct sockaddr *sa, socklen_t salen,
            char *host, size_t hostlen,
            char *serv, size_t servlen, int flags)
 {
+#ifdef GETADDRINFO_EMU
+    return getnameinfo(sa, salen, host, hostlen, serv, servlen, flags);
+#else
     struct getnameinfo_arg arg;
     int ret;
     arg.sa = sa;
@@ -306,6 +317,7 @@
     arg.flags = flags;
     ret = BLOCKING_REGION(nogvl_getnameinfo, &arg);
     return ret;
+#endif
 }
 
 static int

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

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