[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 07/23] QMP: Fix error reporting in the async API
From: |
Luiz Capitulino |
Subject: |
[Qemu-devel] [PATCH 07/23] QMP: Fix error reporting in the async API |
Date: |
Thu, 1 Jul 2010 16:21:35 -0300 |
The current asynchronous command API doesn't return a QMP response
when the async command fails.
This is easy to reproduce with the balloon command (the sole async
command we have so far): run qemu w/o the '-balloon virtio' option
and try to issue the balloon command via QMP: no response will be
sent to the client.
This commit fixes the problem by making qmp_async_cmd_handler()
return the handler's error code and then calling
monitor_protocol_emitter() if the handler has returned an error.
Signed-off-by: Luiz Capitulino <address@hidden>
---
monitor.c | 12 ++++++++----
1 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/monitor.c b/monitor.c
index 980e98d..58b060b 100644
--- a/monitor.c
+++ b/monitor.c
@@ -546,10 +546,10 @@ static void qmp_monitor_complete(void *opaque, QObject
*ret_data)
monitor_protocol_emitter(opaque, ret_data);
}
-static void qmp_async_cmd_handler(Monitor *mon, const mon_cmd_t *cmd,
- const QDict *params)
+static int qmp_async_cmd_handler(Monitor *mon, const mon_cmd_t *cmd,
+ const QDict *params)
{
- cmd->mhandler.cmd_async(mon, params, qmp_monitor_complete, mon);
+ return cmd->mhandler.cmd_async(mon, params, qmp_monitor_complete, mon);
}
static void qmp_async_info_handler(Monitor *mon, const mon_cmd_t *cmd)
@@ -4239,7 +4239,11 @@ static void handle_qmp_command(JSONMessageParser
*parser, QList *tokens)
}
if (monitor_handler_is_async(cmd)) {
- qmp_async_cmd_handler(mon, cmd, args);
+ err = qmp_async_cmd_handler(mon, cmd, args);
+ if (err) {
+ /* emit the error response */
+ goto err_out;
+ }
} else {
monitor_call_handler(mon, cmd, args);
}
--
1.7.2.rc0
- [Qemu-devel] [PATCH 00/23][PULL]: QMP/Monitor queue, Luiz Capitulino, 2010/07/01
- [Qemu-devel] [PATCH 01/23] monitor: Fix leakage during completion processing, Luiz Capitulino, 2010/07/01
- [Qemu-devel] [PATCH 02/23] monitor: Fix command completion vs. boolean switches, Luiz Capitulino, 2010/07/01
- [Qemu-devel] [PATCH 03/23] monitor: Establish cmd flags and convert the async tag, Luiz Capitulino, 2010/07/01
- [Qemu-devel] [PATCH 04/23] QMP: Teach basic capability negotiation to python example, Luiz Capitulino, 2010/07/01
- [Qemu-devel] [PATCH 05/23] QMP: Fix python helper /wrt long return strings, Luiz Capitulino, 2010/07/01
- [Qemu-devel] [PATCH 06/23] net: delete QemuOpts when net_client_init() fails., Luiz Capitulino, 2010/07/01
- [Qemu-devel] [PATCH 07/23] QMP: Fix error reporting in the async API,
Luiz Capitulino <=
- [Qemu-devel] [PATCH 09/23] QDict: Rename 'err_value', Luiz Capitulino, 2010/07/01
- [Qemu-devel] [PATCH 08/23] QError: Enhance QERR_DEVICE_NOT_ACTIVE's user desc, Luiz Capitulino, 2010/07/01
- [Qemu-devel] [PATCH 11/23] QDict: Introduce functions to retrieve QDictEntry values, Luiz Capitulino, 2010/07/01
- [Qemu-devel] [PATCH 10/23] QDict: Small terminology change, Luiz Capitulino, 2010/07/01
- [Qemu-devel] [PATCH 13/23] check-qdict: Introduce test for the new iteration API, Luiz Capitulino, 2010/07/01
- [Qemu-devel] [PATCH 14/23] QDict: Introduce qdict_get_try_bool(), Luiz Capitulino, 2010/07/01
- [Qemu-devel] [PATCH 12/23] QDict: Introduce new iteration API, Luiz Capitulino, 2010/07/01
- [Qemu-devel] [PATCH 15/23] Monitor: handle optional '-' arg as a bool, Luiz Capitulino, 2010/07/01
- [Qemu-devel] [PATCH 16/23] QMP: New argument checker (first part), Luiz Capitulino, 2010/07/01
- [Qemu-devel] [PATCH 17/23] QMP: New argument checker (second part), Luiz Capitulino, 2010/07/01