summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Komyagin <komyagin@altell.ru>2012-04-04 12:58:37 +0400
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2012-04-17 12:16:46 +0200
commit777aef50973bc3a20db8d9545494e8abb86a692e (patch)
treecb400b8953a7c36730ce8465dd7b40489a7d02f5
parent97214b87d6317d75e9a7f6dd69148724c2675e4b (diff)
getaddrinfo(): avoid call to __check_pf() when not needed
__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>
-rw-r--r--libc/inet/getaddrinfo.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/libc/inet/getaddrinfo.c b/libc/inet/getaddrinfo.c
index fe0d942d9..88bd745a9 100644
--- a/libc/inet/getaddrinfo.c
+++ b/libc/inet/getaddrinfo.c
@@ -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));