From 2ff68dd526c5e9bf5ace14299c90ecfd4c762333 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 26 Oct 2013 09:16:29 +0200 Subject: [PATCH] Close #19339: telnetlib module is now using time.monotonic() when available to compute timeout. --- Lib/telnetlib.py | 28 ++++++++++++++-------------- Misc/NEWS | 3 +++ 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/Lib/telnetlib.py b/Lib/telnetlib.py index a59693e7463..14ca1b19041 100644 --- a/Lib/telnetlib.py +++ b/Lib/telnetlib.py @@ -38,6 +38,10 @@ import errno import sys import socket import select +try: + from time import monotonic as _time +except ImportError: + from time import time as _time __all__ = ["Telnet"] @@ -302,8 +306,7 @@ class Telnet: n = len(match) call_timeout = timeout if timeout is not None: - from time import time - time_start = time() + time_start = _time() self.process_rawq() i = self.cookedq.find(match) if i < 0: @@ -316,7 +319,7 @@ class Telnet: except select.error as e: if e.errno == errno.EINTR: if timeout is not None: - elapsed = time() - time_start + elapsed = _time() - time_start call_timeout = timeout-elapsed continue raise @@ -327,7 +330,7 @@ class Telnet: self.process_rawq() i = self.cookedq.find(match, i) if timeout is not None: - elapsed = time() - time_start + elapsed = _time() - time_start if elapsed >= timeout: break call_timeout = timeout-elapsed @@ -356,8 +359,7 @@ class Telnet: s_args = s_reply if timeout is not None: s_args = s_args + (timeout,) - from time import time - time_start = time() + time_start = _time() while not self.eof and select.select(*s_args) == s_reply: i = max(0, len(self.cookedq)-n) self.fill_rawq() @@ -369,7 +371,7 @@ class Telnet: self.cookedq = self.cookedq[i:] return buf if timeout is not None: - elapsed = time() - time_start + elapsed = _time() - time_start if elapsed >= timeout: break s_args = s_reply + (timeout-elapsed,) @@ -665,8 +667,7 @@ class Telnet: expect_list[i] = re.compile(expect_list[i]) call_timeout = timeout if timeout is not None: - from time import time - time_start = time() + time_start = _time() self.process_rawq() m = None for i in indices: @@ -686,7 +687,7 @@ class Telnet: except select.error as e: if e.errno == errno.EINTR: if timeout is not None: - elapsed = time() - time_start + elapsed = _time() - time_start call_timeout = timeout-elapsed continue raise @@ -702,7 +703,7 @@ class Telnet: self.cookedq = self.cookedq[e:] break if timeout is not None: - elapsed = time() - time_start + elapsed = _time() - time_start if elapsed >= timeout: break call_timeout = timeout-elapsed @@ -727,8 +728,7 @@ class Telnet: if not re: import re list[i] = re.compile(list[i]) if timeout is not None: - from time import time - time_start = time() + time_start = _time() while 1: self.process_rawq() for i in indices: @@ -741,7 +741,7 @@ class Telnet: if self.eof: break if timeout is not None: - elapsed = time() - time_start + elapsed = _time() - time_start if elapsed >= timeout: break s_args = ([self.fileno()], [], [], timeout-elapsed) diff --git a/Misc/NEWS b/Misc/NEWS index cc5f3a2c2e1..7e0291a363d 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -81,6 +81,9 @@ Core and Builtins Library ------- +- Issue #19339: telnetlib module is now using time.monotonic() when available + to compute timeout. + - Issue #19288: Fixed the "in" operator of dbm.gnu databases for string argument. Original patch by Arfrever Frehtes Taifersar Arahesis.