* [Qemu-devel] [PATCH 1/2] QMP: Fix error reporting in the async API
2010-06-23 15:46 [Qemu-devel] [PATCH 0/2]: QMP/Monitor: Fix balloon error reporting Luiz Capitulino
@ 2010-06-23 15:46 ` Luiz Capitulino
2010-06-23 15:46 ` [Qemu-devel] [PATCH 2/2] QError: Enhance QERR_DEVICE_NOT_ACTIVE's user desc Luiz Capitulino
1 sibling, 0 replies; 3+ messages in thread
From: Luiz Capitulino @ 2010-06-23 15:46 UTC (permalink / raw)
To: qemu-devel; +Cc: armbru
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 <lcapitulino@redhat.com>
---
monitor.c | 12 ++++++++----
1 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/monitor.c b/monitor.c
index 170b269..ba7d5d9 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)
@@ -4232,7 +4232,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.1.359.gd0b8d
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [Qemu-devel] [PATCH 2/2] QError: Enhance QERR_DEVICE_NOT_ACTIVE's user desc
2010-06-23 15:46 [Qemu-devel] [PATCH 0/2]: QMP/Monitor: Fix balloon error reporting Luiz Capitulino
2010-06-23 15:46 ` [Qemu-devel] [PATCH 1/2] QMP: Fix error reporting in the async API Luiz Capitulino
@ 2010-06-23 15:46 ` Luiz Capitulino
1 sibling, 0 replies; 3+ messages in thread
From: Luiz Capitulino @ 2010-06-23 15:46 UTC (permalink / raw)
To: qemu-devel; +Cc: armbru
The 'by the guest' part is misleading, it could be disabled by
the host too.
We will likely need more surgery if we care for the distinction,
just dropping the problematic part is good enough for now.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
qerror.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/qerror.c b/qerror.c
index 44d0bf8..cce1e7b 100644
--- a/qerror.c
+++ b/qerror.c
@@ -82,7 +82,7 @@ static const QErrorStringTable qerror_table[] = {
},
{
.error_fmt = QERR_DEVICE_NOT_ACTIVE,
- .desc = "Device '%(device)' has not been activated by the guest",
+ .desc = "Device '%(device)' has not been activated",
},
{
.error_fmt = QERR_DEVICE_NOT_ENCRYPTED,
--
1.7.1.359.gd0b8d
^ permalink raw reply related [flat|nested] 3+ messages in thread