From: Stephen Warren Date: Fri, 22 Jan 2016 19:30:07 +0000 (-0700) Subject: test/py: fix timeout to be absolute X-Git-Tag: v2016.03-rc1~41^2~30 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=d314e247e1aede35cdfe448ad9262edc0d90a9ba;p=u-boot test/py: fix timeout to be absolute Currently, Spawn.expect() imposes its timeout solely upon receipt of new data, not on its overall operation. In theory, this could cause the timeout not to fire if U-Boot continually generated output that did not match the expected patterns. Fix the code to additionally impose a timeout on overall operation, which is the intended mode of operation. Signed-off-by: Stephen Warren Reviewed-by: Lukasz Majewski Acked-by: Simon Glass --- diff --git a/test/py/u_boot_spawn.py b/test/py/u_boot_spawn.py index 1baee63df2..df4c67597c 100644 --- a/test/py/u_boot_spawn.py +++ b/test/py/u_boot_spawn.py @@ -122,6 +122,7 @@ class Spawn(object): if type(patterns[pi]) == type(''): patterns[pi] = re.compile(patterns[pi]) + tstart_s = time.time() try: while True: earliest_m = None @@ -142,7 +143,11 @@ class Spawn(object): self.after = self.buf[pos:posafter] self.buf = self.buf[posafter:] return earliest_pi - events = self.poll.poll(self.timeout) + tnow_s = time.time() + tdelta_ms = (tnow_s - tstart_s) * 1000 + if tdelta_ms > self.timeout: + raise Timeout() + events = self.poll.poll(self.timeout - tdelta_ms) if not events: raise Timeout() c = os.read(self.fd, 1024)