[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC 03/18] qmp.py: Cleanly handle unexpectedly closed sock
From: |
Eduardo Habkost |
Subject: |
[Qemu-devel] [RFC 03/18] qmp.py: Cleanly handle unexpectedly closed socket |
Date: |
Thu, 29 Mar 2018 18:38:42 -0300 |
QEMUMonitorProtocol.cmd() returns None if the socket was closed,
so callers must handle this case explicltly.
Signed-off-by: Eduardo Habkost <address@hidden>
---
scripts/qmp/qmp.py | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/scripts/qmp/qmp.py b/scripts/qmp/qmp.py
index e9cb6b2683..91b537ea04 100644
--- a/scripts/qmp/qmp.py
+++ b/scripts/qmp/qmp.py
@@ -73,6 +73,8 @@ class QEMUMonitorProtocol(object):
raise QMPConnectError
# Greeting seems ok, negotiate capabilities
resp = self.cmd('qmp_capabilities')
+ if resp is None:
+ raise QMPConnectError("QMP connection unexpectedly closed")
if "return" in resp:
return greeting
raise QMPCapabilitiesError
@@ -182,6 +184,8 @@ class QEMUMonitorProtocol(object):
@param name: command name (string)
@param args: command arguments (dict)
@param cmd_id: command id (dict, list, string or int)
+ @return QMP response as a Python dict or None if the connection has
+ been closed
"""
qmp_cmd = {'execute': name}
if args:
@@ -195,6 +199,8 @@ class QEMUMonitorProtocol(object):
Build and send a QMP command to the monitor, report errors if any
"""
ret = self.cmd(cmd, kwds)
+ if ret is None:
+ raise QMPConnectError("QMP connection unexpectedly closed")
if "error" in ret:
raise Exception(ret['error']['desc'])
return ret['return']
--
2.14.3
- [Qemu-devel] [RFC 00/18] QEMU validator: A method to specify QEMU crash-test cases, Eduardo Habkost, 2018/03/29
- [Qemu-devel] [RFC 01/18] qmp.py: Make it safe to call close() any time, Eduardo Habkost, 2018/03/29
- [Qemu-devel] [RFC 02/18] qmp.py: Fix error handling for Python 3, Eduardo Habkost, 2018/03/29
- [Qemu-devel] [RFC 03/18] qmp.py: Cleanly handle unexpectedly closed socket,
Eduardo Habkost <=
- [Qemu-devel] [RFC 04/18] qemu.py: Make _vm_monitor a method, Eduardo Habkost, 2018/03/29
- [Qemu-devel] [RFC 05/18] qemu.py: Split _base_args(), Eduardo Habkost, 2018/03/29
- [Qemu-devel] [RFC 06/18] qemu.py: Move _load_io_log() call to _post_shutdown(), Eduardo Habkost, 2018/03/29
- [Qemu-devel] [RFC 07/18] qemu.py: Use wait() logic inside shutdown(), Eduardo Habkost, 2018/03/29
- [Qemu-devel] [RFC 08/18] qemu.py: Close _qmp inside _post_shutdown(), Eduardo Habkost, 2018/03/29
- [Qemu-devel] [RFC 09/18] qemu.py: Make monitor optional, Eduardo Habkost, 2018/03/29
- [Qemu-devel] [RFC 10/18] qemu.py: Set _launched = False on _post_shutdown, Eduardo Habkost, 2018/03/29
- [Qemu-devel] [RFC 11/18] qemu.py: Log crashes inside _post_shutdown(), Eduardo Habkost, 2018/03/29
- [Qemu-devel] [RFC 13/18] qemu.py: 'force' parameter on shutdown(), Eduardo Habkost, 2018/03/29
- [Qemu-devel] [RFC 12/18] qemu.py: Only wait for process if it's still running, Eduardo Habkost, 2018/03/29