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.
This commit is contained in:
Ulrich Drepper 2004-02-23 19:54:06 +00:00
parent a8fd5a02d9
commit 5605e1177d
4 changed files with 53 additions and 3 deletions

View File

@ -1,3 +1,13 @@
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> 2004-02-22 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/i386/posix_fadvise64.S: Pop register * sysdeps/unix/sysv/linux/i386/posix_fadvise64.S: Pop register

View File

@ -82,6 +82,7 @@ tests := tstgetopt testfnm runtests runptests \
bug-regex21 bug-regex22 bug-regex23 tst-nice tst-nanosleep \ bug-regex21 bug-regex22 bug-regex23 tst-nice tst-nanosleep \
transbug tst-rxspencer tst-pcre tst-boost \ transbug tst-rxspencer tst-pcre tst-boost \
bug-ga1 bug-ga1
xtests := bug-ga2
ifeq (yes,$(build-shared)) ifeq (yes,$(build-shared))
test-srcs := globtest test-srcs := globtest
tests += wordexp-test tst-exec tst-spawn tests += wordexp-test tst-exec tst-spawn
@ -98,7 +99,8 @@ generated := $(addprefix wordexp-test-result, 1 2 3 4 5 6 7 8 9 10) \
bug-regex2.mtrace bug-regex14-mem bug-regex14.mtrace \ bug-regex2.mtrace bug-regex14-mem bug-regex14.mtrace \
bug-regex21-mem bug-regex21.mtrace \ bug-regex21-mem bug-regex21.mtrace \
tst-rxspencer-mem tst-rxspencer.mtrace tst-getconf.out \ 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 include ../Rules
@ -191,6 +193,7 @@ ifeq (no,$(cross-compiling))
tests: $(objpfx)bug-regex2-mem $(objpfx)bug-regex14-mem \ tests: $(objpfx)bug-regex2-mem $(objpfx)bug-regex14-mem \
$(objpfx)bug-regex21-mem $(objpfx)tst-rxspencer-mem \ $(objpfx)bug-regex21-mem $(objpfx)tst-rxspencer-mem \
$(objpfx)tst-pcre-mem $(objpfx)tst-boost-mem $(objpfx)tst-getconf.out $(objpfx)tst-pcre-mem $(objpfx)tst-boost-mem $(objpfx)tst-getconf.out
xtests: $(objpfx)bug-ga2-mem
endif endif
$(objpfx)annexc.out: $(objpfx)annexc $(objpfx)annexc.out: $(objpfx)annexc
@ -241,3 +244,8 @@ $(objpfx)tst-regex: $(common-objpfx)rt/librt.so
else else
$(objpfx)tst-regex: $(common-objpfx)rt/librt.a $(objpfx)tst-regex: $(common-objpfx)rt/librt.a
endif 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

30
posix/bug-ga2.c Normal file
View File

@ -0,0 +1,30 @@
/* 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;
}

View File

@ -604,8 +604,6 @@ gaih_inet (const char *name, const struct gaih_service *service,
struct gaih_addrtuple **pat = &at; struct gaih_addrtuple **pat = &at;
int no_data = 0; int no_data = 0;
int no_inet6_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 /* If we are looking for both IPv4 and IPv6 address we don't
want the lookup functions to automatically promote IPv4 want the lookup functions to automatically promote IPv4
addresses to IPv6 addresses. Currently this is decided addresses to IPv6 addresses. Currently this is decided
@ -616,6 +614,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
enum nss_status inet6_status, status = NSS_STATUS_UNAVAIL; enum nss_status inet6_status, status = NSS_STATUS_UNAVAIL;
int no_more; int no_more;
nss_gethostbyname2_r fct; nss_gethostbyname2_r fct;
int old_res_options;
if (__nss_hosts_database != NULL) if (__nss_hosts_database != NULL)
{ {
@ -626,6 +625,9 @@ gaih_inet (const char *name, const struct gaih_service *service,
no_more = __nss_database_lookup ("hosts", NULL, no_more = __nss_database_lookup ("hosts", NULL,
"dns [!UNAVAIL=return] files", &nip); "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; _res.options &= ~RES_USE_INET6;
while (!no_more) while (!no_more)