qemurunner.py: fix race condition at qemu startup
cover qemurunner.py: fix race condition at qemu startup
*** BLURB HERE ***
The following changes since commit 80ab79168ede2786868cbd354f0950c949f73527:
gnome-themes-standard: remove (2019-07-11 09:32:50 +0100)
are available in the git repository at:
git://git.pokylinux.org/poky-contrib ChenQi/qemurunner-race
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=ChenQi/qemurunner-race
Chen Qi (1):
qemurunner.py: fix race condition at qemu startup
meta/lib/oeqa/utils/qemurunner.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-)
Signature · 1 line
1.9.1
PATCH 1/1 qemurunner.py: fix race condition at qemu startup
When handling pid file, qemu would first create the file, stat it, lock it and then write actually contents to it.
So it's possbile that when reading the pid file, the content is empty.
[YOCTO #13390]
Signed-off-by Chen Qi <[email protected]>
--- meta/lib/oeqa/utils/qemurunner.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-)
meta/lib/oeqa/utils/qemurunner.py +14 -7
@@ -425,13 +425,20 @@ class QemuRunner: if not self.runqemu or self.runqemu.poll() is not None: return False if os.path.isfile(self.qemu_pidfile): - f = open(self.qemu_pidfile, 'r') - qemu_pid = f.read() - f.close() - qemupid = int(qemu_pid) - if os.path.exists("/proc/" + str(qemupid)): - self.qemupid = qemupid - return True + # when handling pidfile, qemu creates the file, stat it, lock it and then write to it + # so it's possible that the file has been created but the content is empty + pidfile_timeout = time.time() + 3 + while time.time() < pidfile_timeout: + with open(self.qemu_pidfile, 'r') as f: + qemu_pid = f.read().strip() + # file created but not yet written contents + if not qemu_pid: + time.sleep(0.5) + continue + else: + if os.path.exists("/proc/" + qemu_pid): + self.qemupid = int(qemu_pid) + return True return False def run_serial(self, command, raw=False, timeout=60):
Signature · 1 line
1.9.1