blob: ecb95039d04cda1f386bce45252ed82765dd8483 [file] [log] [blame]
From b30a74671ca603e6bfd514f72d4fd7fd6fceef54 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Fri, 26 Aug 2016 02:02:49 -0400
Subject: [PATCH 05/11] fix incorrect timeout while system time changed
While system time changed by NTP, invoking timeout_command
breaks with incorrect timeout.
--------
|05:40:55,872 INFO program: Running... mount -t ext2 -o
defaults,ro /dev/sda2 /mnt/sysimage
|01:40:55,086 DEBUG program: 10 seconds timeout
--------
Use numbert count to replace current time count could workaround
the issue.
Upstream-Status: Pending
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
blivet/util.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/blivet/util.py b/blivet/util.py
index d6804be..bc08af5 100644
--- a/blivet/util.py
+++ b/blivet/util.py
@@ -162,14 +162,14 @@ def timeout_command(argv, timeout, *args, **kwargs):
"""call shell-command and either return its output or kill it
if it doesn't normally exit within timeout seconds and return None"""
import subprocess, datetime, os, time, signal
- start = datetime.datetime.now()
+ count = 0
try:
proc = subprocess.Popen(argv, *args, **kwargs)
while proc.poll() is None:
time.sleep(0.1)
- now = datetime.datetime.now()
- if timeout != -1 and (now - start).seconds> timeout:
+ count += 1
+ if timeout != -1 and count > timeout*10:
os.kill(proc.pid, signal.SIGKILL)
os.waitpid(-1, os.WNOHANG)
program_log.debug("%d seconds timeout" % timeout)
--
2.7.4