OSDN Git Service

getaddrinfo(): avoid call to __check_pf() when not needed
authorAlexander Komyagin <komyagin@altell.ru>
Wed, 4 Apr 2012 08:58:37 +0000 (12:58 +0400)
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Tue, 17 Apr 2012 10:16:46 +0000 (12:16 +0200)
__check_pf() function is called from getaddrinfo() and it calls
getifaddrs(), which is too much overhead especially if RSBAC-Net
is enabled. So with this patch __check_pf() is being called only
when AI_ADDRCONFIG hint flag is specified - just when we really
need that check.

Signed-off-by: Alexander Komyagin <komyagin@altell.ru>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
libc/inet/getaddrinfo.c

index fe0d942..88bd745 100644 (file)
@@ -401,7 +401,13 @@ gaih_inet(const char *name, const struct gaih_service *service,
        int rc;
        int v4mapped = (req->ai_family == PF_UNSPEC || req->ai_family == PF_INET6)
                        && (req->ai_flags & AI_V4MAPPED);
-       unsigned seen = __check_pf();
+       unsigned seen = 0;
+       if (req->ai_flags & AI_ADDRCONFIG) {
+               /* "seen" is only used when AI_ADDRCONFIG is specified.
+                  Avoid unnecessary call to __check_pf() otherwise
+                  since it can be costly especially when RSBAC-Net is enabled.  */
+               seen = __check_pf();
+       }
 
        memset(&nullserv, 0, sizeof(nullserv));