commit: 613bb0efeebe6461b37df6baa862f4a3e67c94c7 Author: Zac Medico <zmedico <AT> gentoo <DOT> org> AuthorDate: Mon Nov 14 07:16:51 2016 +0000 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> CommitDate: Mon Nov 14 07:23:19 2016 +0000 URL: https://gitweb.gentoo.org/proj/mirrorselect.git/commit/?id=613bb0ef
deeptime: cancel alarm signal before handling socket.error (bug 523312) In order to avoid a race condition, the alarm signal must be cancelled before socket.error is handled. X-Gentoo-Bug: 523312 X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=523312 mirrorselect/selectors.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/mirrorselect/selectors.py b/mirrorselect/selectors.py index 1aa5f11..cf70b21 100644 --- a/mirrorselect/selectors.py +++ b/mirrorselect/selectors.py @@ -300,22 +300,24 @@ class Deep(object): ips = [] for addr_family in self._addr_families: try: - signal.alarm(self._dns_timeout) - for result in socket.getaddrinfo(url_parts.hostname, None, - addr_family, socket.SOCK_STREAM, 0, socket.AI_ADDRCONFIG): - family, _, __, ___, sockaddr = result - ip = sockaddr[0] - if family == socket.AF_INET6: - ip = "[%s]" % ip - ips.append(ip) + try: + signal.alarm(self._dns_timeout) + for result in socket.getaddrinfo( + url_parts.hostname, None, addr_family, + socket.SOCK_STREAM, 0, socket.AI_ADDRCONFIG): + family, _, __, ___, sockaddr = result + ip = sockaddr[0] + if family == socket.AF_INET6: + ip = "[%s]" % ip + ips.append(ip) + finally: + signal.alarm(0) except socket.error as e: self.output.write('deeptime(): dns error for host %s: %s\n' % (url_parts.hostname, e), 2) except TimeoutException: self.output.write('deeptime(): dns timeout for host %s\n' % url_parts.hostname, 2) - finally: - signal.alarm(0) if not ips: self.output.write('deeptime(): unable to resolve ip for host %s\n'
