2004-07-21  Jakub Jelinek  <jakub@redhat.com>

	* resolv/res_libc.c (res_init): If RES_INIT is set and
	_res.nscount > 0, call __res_nclose and free nsaddrs.
	* resolv/Makefile: Add rules to build and run tst-leaks2.
	* resolv/tst-leaks2.c: New test.
This commit is contained in:
Ulrich Drepper 2004-07-21 18:30:11 +00:00
parent 84b5ba7ecf
commit 2ed2dc1846
4 changed files with 69 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2004-07-21 Jakub Jelinek <jakub@redhat.com>
* resolv/res_libc.c (res_init): If RES_INIT is set and
_res.nscount > 0, call __res_nclose and free nsaddrs.
* resolv/Makefile: Add rules to build and run tst-leaks2.
* resolv/tst-leaks2.c: New test.
2004-07-21 Ulrich Drepper <drepper@redhat.com>
* intl/libintl.h: Don't define macros for C++.

View File

@ -33,8 +33,9 @@ routines := herror inet_addr inet_ntop inet_pton nsap_addr res_init \
res_hconf res_libc res-state
tests = tst-aton tst-leaks
xtests = tst-leaks2
generate := mtrace-tst-leaks tst-leaks.mtrace
generate := mtrace-tst-leaks tst-leaks.mtrace tst-leaks2.mtrace
include ../Makeconfig
@ -65,7 +66,8 @@ ifeq (yesyes,$(build-shared)$(have-thread-library))
tests: $(objpfx)ga_test
endif
generated := mtrace-tst-leaks tst-leaks.mtrace
generated := mtrace-tst-leaks tst-leaks.mtrace \
mtrace-tst-leaks2 tst-leaks2.mtrace
include ../Rules
@ -104,3 +106,12 @@ ifneq (no,$(PERL))
tests: $(objpfx)mtrace-tst-leaks
endif
endif
tst-leaks2-ENV = MALLOC_TRACE=$(objpfx)tst-leaks2.mtrace
$(objpfx)mtrace-tst-leaks2: $(objpfx)tst-leaks2.out
$(common-objpfx)malloc/mtrace $(objpfx)tst-leaks2.mtrace > $@
ifeq (no,$(cross-compiling))
ifneq (no,$(PERL))
xtests: $(objpfx)mtrace-tst-leaks2
endif
endif

View File

@ -54,6 +54,14 @@ res_init(void) {
_res.retry = 4;
if (!(_res.options & RES_INIT))
_res.options = RES_DEFAULT;
else if (_res.nscount > 0) {
__res_nclose (&_res); /* Close any VC sockets. */
for (int ns = 0; ns < MAXNS; ns++) {
free (_res._u._ext.nsaddrs[ns]);
_res._u._ext.nsaddrs[ns] = NULL;
}
}
/*
* This one used to initialize implicitly to zero, so unless the app

41
resolv/tst-leaks2.c Normal file
View File

@ -0,0 +1,41 @@
/* Tests for res_init in libresolv
Copyright (C) 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#undef gethostbyname
#include <mcheck.h>
#include <netdb.h>
#include <resolv.h>
static int
do_test (void)
{
mtrace ();
for (int i = 0; i < 20; ++i)
{
res_init ();
gethostbyname ("www.gnu.org");
}
return 0;
}
#define TEST_FUNCTION do_test ()
#define TIMEOUT 30
/* This defines the `main' function and some more. */
#include <test-skeleton.c>