+2004-02-23 Jakub Jelinek <jakub@redhat.com>
+
+ * sysdeps/posix/getaddrinfo.c (gaih_inet): If _res has not been
+ inited yet, try to init it before saving old _res.options.
+ * posix/Makefile (xtests): Add bug-ga2.
+ (generated): Add bug-ga2.mtrace and bug-ga2-mem.
+ (xtests): Depend on bug-ga2-mem.
+ ($(objpfx)bug-ga2-mem, bug-ga2-ENV): New.
+ * posix/bug-ga2.c: New test.
+
2004-02-22 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/i386/posix_fadvise64.S: Pop register
bug-regex21 bug-regex22 bug-regex23 tst-nice tst-nanosleep \
transbug tst-rxspencer tst-pcre tst-boost \
bug-ga1
+xtests := bug-ga2
ifeq (yes,$(build-shared))
test-srcs := globtest
tests += wordexp-test tst-exec tst-spawn
bug-regex2.mtrace bug-regex14-mem bug-regex14.mtrace \
bug-regex21-mem bug-regex21.mtrace \
tst-rxspencer-mem tst-rxspencer.mtrace tst-getconf.out \
- tst-pcre-mem tst-pcre.mtrace tst-boost-mem tst-boost.mtrace
+ tst-pcre-mem tst-pcre.mtrace tst-boost-mem tst-boost.mtrace \
+ bug-ga2.mtrace bug-ga2-mem
include ../Rules
tests: $(objpfx)bug-regex2-mem $(objpfx)bug-regex14-mem \
$(objpfx)bug-regex21-mem $(objpfx)tst-rxspencer-mem \
$(objpfx)tst-pcre-mem $(objpfx)tst-boost-mem $(objpfx)tst-getconf.out
+xtests: $(objpfx)bug-ga2-mem
endif
$(objpfx)annexc.out: $(objpfx)annexc
else
$(objpfx)tst-regex: $(common-objpfx)rt/librt.a
endif
+
+$(objpfx)bug-ga2-mem: $(objpfx)bug-ga2.out
+ $(common-objpfx)malloc/mtrace $(objpfx)bug-ga2.mtrace > $@
+
+bug-ga2-ENV = MALLOC_TRACE=$(objpfx)bug-ga2.mtrace
--- /dev/null
+/* Test case by Sam Varshavchik <mrsam@courier-mta.com>. */
+#include <mcheck.h>
+#include <netdb.h>
+#include <stdio.h>
+#include <string.h>
+
+int
+main (void)
+{
+ struct addrinfo hints, *res;
+ int i, ret;
+
+ mtrace ();
+ for (i = 0; i < 100; i++)
+ {
+ memset (&hints, 0, sizeof (hints));
+ hints.ai_family = PF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+
+ ret = getaddrinfo ("www.gnu.org", "http", &hints, &res);
+
+ if (ret)
+ {
+ printf ("%s\n", gai_strerror (ret));
+ return 1;
+ }
+ freeaddrinfo (res);
+ }
+ return 0;
+}
struct gaih_addrtuple **pat = &at;
int no_data = 0;
int no_inet6_data = 0;
- int old_res_options = _res.options;
-
/* If we are looking for both IPv4 and IPv6 address we don't
want the lookup functions to automatically promote IPv4
addresses to IPv6 addresses. Currently this is decided
enum nss_status inet6_status, status = NSS_STATUS_UNAVAIL;
int no_more;
nss_gethostbyname2_r fct;
+ int old_res_options;
if (__nss_hosts_database != NULL)
{
no_more = __nss_database_lookup ("hosts", NULL,
"dns [!UNAVAIL=return] files", &nip);
+ if ((_res.options & RES_INIT) == 0 && __res_ninit(&_res) == -1)
+ no_more = 1;
+ old_res_options = _res.options;
_res.options &= ~RES_USE_INET6;
while (!no_more)