diff options
author | Ulrich Drepper <drepper@redhat.com> | 2005-11-01 00:08:54 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2005-11-01 00:08:54 +0000 |
commit | cb07f6f67db0ef4ccbf3bedfb7c9c4f140773d2c (patch) | |
tree | 2524b26825fbddf3868e2e8a976f030d4e1dd626 /resolv/res_init.c | |
parent | 6ff8f07aba531a7f8641562889898b1a657d7d54 (diff) | |
download | glibc-cb07f6f67db0ef4ccbf3bedfb7c9c4f140773d2c.tar.gz glibc-cb07f6f67db0ef4ccbf3bedfb7c9c4f140773d2c.tar.xz glibc-cb07f6f67db0ef4ccbf3bedfb7c9c4f140773d2c.zip |
* resolv/res_init.c (__res_iclose): New function. Broken out of
res_nclose. Take addition parameter which determines whether addresses should be freed. (res_nclose): Call __res_iclose. (res_thread_freeres): Likewise. * resolv/res_data.c (res_close): Call __res_iclose. * resolv/res_libc.c (res_init): No need to separately free the addresses. (__res_maybe_init): Likewise. * resolv/res_send.c: Use __res_iclose instead of res_nclose. * resolv/Versions [GLIBC_PRIVATE]: Add __res_iclose. * include/resolv.h: Declare __res_iclose. Add libc_hidden_proto for __res_iclose. * hesiod/hesiod.c (__hesiod_res_set): No need to free name server addresses here again.
Diffstat (limited to 'resolv/res_init.c')
-rw-r--r-- | resolv/res_init.c | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/resolv/res_init.c b/resolv/res_init.c index 731c784e17..f881060d58 100644 --- a/resolv/res_init.c +++ b/resolv/res_init.c @@ -555,7 +555,7 @@ libc_hidden_def (__res_randomid) * This routine is not expected to be user visible. */ void -res_nclose(res_state statp) { +__res_iclose(res_state statp, bool free_addr) { int ns; if (statp->_vcsock >= 0) { @@ -568,13 +568,25 @@ res_nclose(res_state statp) { #else for (ns = 0; ns < statp->_u._ext.nscount; ns++) #endif - if (statp->_u._ext.nsaddrs[ns] - && statp->_u._ext.nssocks[ns] != -1) { - close_not_cancel_no_status(statp->_u._ext.nssocks[ns]); - statp->_u._ext.nssocks[ns] = -1; + if (statp->_u._ext.nsaddrs[ns]) { + if (statp->_u._ext.nssocks[ns] != -1) { + close_not_cancel_no_status(statp->_u._ext.nssocks[ns]); + statp->_u._ext.nssocks[ns] = -1; + } + if (free_addr) { + free (statp->_u._ext.nsaddrs[ns]); + statp->_u._ext.nsaddrs[ns] = NULL; + } } statp->_u._ext.nsinit = 0; } +libc_hidden_def (__res_iclose) + +void +res_nclose(res_state statp) +{ + __res_iclose (statp, true); +} #ifdef _LIBC libc_hidden_def (__res_nclose) #endif @@ -589,14 +601,7 @@ res_thread_freeres (void) /* Never called res_ninit. */ return; - __res_nclose (&_res); /* Close any VC sockets. */ - - for (int ns = 0; ns < MAXNS; ns++) - if (_res._u._ext.nsaddrs[ns] != NULL) - { - free (_res._u._ext.nsaddrs[ns]); - _res._u._ext.nsaddrs[ns] = NULL; - } + __res_iclose (&_res, true); /* Close any VC sockets. */ /* Make sure we do a full re-initialization the next time. */ _res.options = 0; |