Commit dab91d9a authored by Amador Pahim's avatar Amador Pahim Committed by Eduardo Habkost
Browse files

qemu.py: improve message on negative exit code



The current message shows 'self._args', which contains only part of the
options used in the Qemu command line.

This patch makes the qemu full args list an instance variable and then
uses it in the negative exit code message.

Message was moved outside the 'if is_running' block to make sure it will
be logged if the VM finishes before the call to shutdown().

Signed-off-by: default avatarAmador Pahim <apahim@redhat.com>
Message-Id: <20170901112829.2571-5-apahim@redhat.com>
[ehabkost: removed superfluous parenthesis]
Reviewed-by: default avatarFam Zheng <famz@redhat.com>
Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
parent 63e0ba55
Loading
Loading
Loading
Loading
+17 −7
Original line number Diff line number Diff line
@@ -87,6 +87,7 @@ class QEMUMachine(object):
        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 @@ class QEMUMachine(object):

    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 @@ class QEMUMachine(object):
                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()