mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-23 03:10:05 +00:00
resolv: fix rotate option
The rotate option doesn't work correctly, and only send the query to the same server (the second in the list). The rotation code in itself is not broken, but the nsaddrs structure is reinitialized each time at the beginning of __libc_res_nsend unless RES_STAYOPEN is enabled. This is due to a call to __res_iclose from the end of __libc_res_nsend when answers from the name server have been received. This function closes all the sockets, but doesn't free the addresses (it can do that, but in that case the second argument is false). This patch change the code of __res_iclose to clear statp->_u._ext.nsinit only when the addresses are actually freed. * resolv/res_init.c (__res_iclose): Only clear nsinit if the addresses have been freed.
This commit is contained in:
parent
5fe55e9c65
commit
38949026b3
@ -1,3 +1,8 @@
|
||||
2015-01-06 Aurelien Jarno <aurelien@aurel32.net>
|
||||
|
||||
* resolv/res_init.c (__res_iclose): Only clear nsinit if the
|
||||
addresses have been freed.
|
||||
|
||||
2015-01-06 Aurelien Jarno <aurelien@aurel32.net>
|
||||
|
||||
* resolv/res_init.c (__res_vinit): Improve comments about nserv
|
||||
|
@ -621,6 +621,7 @@ __res_iclose(res_state statp, bool free_addr) {
|
||||
statp->_u._ext.nsaddrs[ns] = NULL;
|
||||
}
|
||||
}
|
||||
if (free_addr)
|
||||
statp->_u._ext.nsinit = 0;
|
||||
}
|
||||
libc_hidden_def (__res_iclose)
|
||||
|
Loading…
Reference in New Issue
Block a user