diff options
author | Alexander Komyagin <komyagin@altell.ru> | 2012-04-04 12:58:37 +0400 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2012-04-17 12:16:46 +0200 |
commit | 777aef50973bc3a20db8d9545494e8abb86a692e (patch) | |
tree | cb400b8953a7c36730ce8465dd7b40489a7d02f5 | |
parent | 97214b87d6317d75e9a7f6dd69148724c2675e4b (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.c | 8 |
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)); |