+2011-06-22 Ulrich Drepper <drepper@gmail.com>
+
+ [BZ #12907]
+ * sysdeps/posix/getaddrinfo.c (getaddrinfo): Avoid calling __check_pf
+ until it is clear that the information is realy needed.
+ Patch mostly by David Hanisch <david.hanisch@nsn.com>.
+
2011-06-22 Andreas Schwab <schwab@redhat.com>
* sysdeps/posix/getaddrinfo.c (gaih_inet): Fix last change.
-GNU C Library NEWS -- history of user-visible changes. 2011-6-21
+GNU C Library NEWS -- history of user-visible changes. 2011-6-22
Copyright (C) 1992-2009, 2010, 2011 Free Software Foundation, Inc.
See the end for copying conditions.
* The following bugs are resolved with this release:
- 12885
+ 12885, 12907
* New program pldd to list loaded object of a process
Implemented by Ulrich Drepper.
size_t in6ailen = 0;
bool seen_ipv4 = false;
bool seen_ipv6 = false;
- /* We might need information about what interfaces are available.
- Also determine whether we have IPv4 or IPv6 interfaces or both. We
- cannot cache the results since new interfaces could be added at
- any time. */
- __check_pf (&seen_ipv4, &seen_ipv6, &in6ai, &in6ailen);
+ bool check_pf_called = false;
if (hints->ai_flags & AI_ADDRCONFIG)
{
+ /* We might need information about what interfaces are available.
+ Also determine whether we have IPv4 or IPv6 interfaces or both. We
+ cannot cache the results since new interfaces could be added at
+ any time. */
+ __check_pf (&seen_ipv4, &seen_ipv6, &in6ai, &in6ailen);
+ check_pf_called = true;
+
/* Now make a decision on what we return, if anything. */
if (hints->ai_family == PF_UNSPEC && (seen_ipv4 || seen_ipv6))
{
struct addrinfo *last = NULL;
char *canonname = NULL;
+ /* Now we definitely need the interface information. */
+ if (! check_pf_called)
+ __check_pf (&seen_ipv4, &seen_ipv6, &in6ai, &in6ailen);
+
/* If we have information about deprecated and temporary addresses
sort the array now. */
if (in6ai != NULL)