1From c645c83628b2290855cbd225e13c038ab75a7f74 Mon Sep 17 00:00:00 2001 2From: Hongxu Jia <hongxu.jia@windriver.com> 3Date: Fri, 26 Aug 2016 02:02:49 -0400 4Subject: [PATCH 05/11] fix incorrect timeout while system time changed 5 6While system time changed by NTP, invoking timeout_command 7breaks with incorrect timeout. 8-------- 9|05:40:55,872 INFO program: Running... mount -t ext2 -o 10 defaults,ro /dev/sda2 /mnt/sysimage 11|01:40:55,086 DEBUG program: 10 seconds timeout 12-------- 13 14Use numbert count to replace current time count could workaround 15the issue. 16 17Upstream-Status: Pending 18 19Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com> 20--- 21 blivet/util.py | 6 +++--- 22 1 file changed, 3 insertions(+), 3 deletions(-) 23 24diff --git a/blivet/util.py b/blivet/util.py 25index 58117ae..5bc5804 100644 26--- a/blivet/util.py 27+++ b/blivet/util.py 28@@ -176,14 +176,14 @@ def timeout_command(argv, timeout, *args, **kwargs): 29 """call shell-command and either return its output or kill it 30 if it doesn't normally exit within timeout seconds and return None""" 31 import subprocess, datetime, os, time, signal 32- start = datetime.datetime.now() 33+ count = 0 34 35 try: 36 proc = subprocess.Popen(argv, *args, **kwargs) 37 while proc.poll() is None: 38 time.sleep(0.1) 39- now = datetime.datetime.now() 40- if timeout != -1 and (now - start).seconds> timeout: 41+ count += 1 42+ if timeout != -1 and count > timeout*10: 43 os.kill(proc.pid, signal.SIGKILL) 44 os.waitpid(-1, os.WNOHANG) 45 program_log.debug("%d seconds timeout" % timeout) 46