|
@@ -87,6 +87,7 @@ def __init__(self, binary, args=None, wrapper=None, name=None,
|
|
|
self._socket_scm_helper = socket_scm_helper
|
|
|
self._debug = debug
|
|
|
self._qmp = None
|
|
|
+ self._qemu_full_args = None
|
|
|
|
|
|
def __enter__(self):
|
|
|
return self
|
|
@@ -186,13 +187,16 @@ def _post_shutdown(self):
|
|
|
|
|
|
def launch(self):
|
|
|
'''Launch the VM and establish a QMP connection'''
|
|
|
+ self._qemu_full_args = None
|
|
|
devnull = open(os.path.devnull, 'rb')
|
|
|
qemulog = open(self._qemu_log_path, 'wb')
|
|
|
try:
|
|
|
self._pre_launch()
|
|
|
- args = (self._wrapper + [self._binary] + self._base_args() +
|
|
|
- self._args)
|
|
|
- self._popen = subprocess.Popen(args, stdin=devnull, stdout=qemulog,
|
|
|
+ self._qemu_full_args = self._wrapper + [self._binary] +
|
|
|
+ self._base_args() + self._args
|
|
|
+ self._popen = subprocess.Popen(self._qemu_full_args,
|
|
|
+ stdin=devnull,
|
|
|
+ stdout=qemulog,
|
|
|
stderr=subprocess.STDOUT,
|
|
|
shell=False)
|
|
|
self._post_launch()
|
|
@@ -212,14 +216,20 @@ def shutdown(self):
|
|
|
self._qmp.close()
|
|
|
except:
|
|
|
self._popen.kill()
|
|
|
+ self._popen.wait()
|
|
|
|
|
|
- exitcode = self._popen.wait()
|
|
|
- if exitcode < 0:
|
|
|
- LOG.warn('qemu received signal %i: %s', -exitcode,
|
|
|
- ' '.join(self._args))
|
|
|
self._load_io_log()
|
|
|
self._post_shutdown()
|
|
|
|
|
|
+ exitcode = self.exitcode()
|
|
|
+ if exitcode is not None and exitcode < 0:
|
|
|
+ msg = 'qemu received signal %i: %s'
|
|
|
+ if self._qemu_full_args:
|
|
|
+ command = ' '.join(self._qemu_full_args)
|
|
|
+ else:
|
|
|
+ command = ''
|
|
|
+ LOG.warn(msg, exitcode, command)
|
|
|
+
|
|
|
def qmp(self, cmd, conv_keys=True, **args):
|
|
|
'''Invoke a QMP command and return the response dict'''
|
|
|
qmp_args = dict()
|