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/