mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-28 00:21:52 +03:00
* 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.
This commit is contained in:
@ -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;
|
||||
|
Reference in New Issue
Block a user