[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 23/30] qapi: Simplify how qmp_dispatch() deals with QCO_NO_SUCCESS
From: |
Markus Armbruster |
Subject: |
[PULL 23/30] qapi: Simplify how qmp_dispatch() deals with QCO_NO_SUCCESS_RESP |
Date: |
Tue, 17 Mar 2020 22:01:08 +0100 |
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Marc-André Lureau <address@hidden>
Message-Id: <address@hidden>
---
qapi/qmp-dispatch.c | 25 +++++++++++++------------
1 file changed, 13 insertions(+), 12 deletions(-)
diff --git a/qapi/qmp-dispatch.c b/qapi/qmp-dispatch.c
index a588072523..550d1fe8d2 100644
--- a/qapi/qmp-dispatch.c
+++ b/qapi/qmp-dispatch.c
@@ -106,7 +106,7 @@ QDict *qmp_dispatch(QmpCommandList *cmds, QObject *request,
QDict *dict = qobject_to(QDict, request);
QObject *id = dict ? qdict_get(dict, "id") : NULL;
QObject *ret = NULL;
- QDict *rsp;
+ QDict *rsp = NULL;
dict = qmp_dispatch_check_obj(request, allow_oob, &err);
if (!dict) {
@@ -151,31 +151,32 @@ QDict *qmp_dispatch(QmpCommandList *cmds, QObject
*request,
args = qdict_get_qdict(dict, "arguments");
qobject_ref(args);
}
-
cmd->fn(args, &ret, &err);
+ qobject_unref(args);
if (err) {
- ;
- } else if (cmd->options & QCO_NO_SUCCESS_RESP) {
+ goto out;
+ }
+
+ if (cmd->options & QCO_NO_SUCCESS_RESP) {
g_assert(!ret);
+ return NULL;
} else if (!ret) {
/* TODO turn into assertion */
ret = QOBJECT(qdict_new());
}
- qobject_unref(args);
+ rsp = qdict_new();
+ qdict_put_obj(rsp, "return", ret);
out:
if (err) {
+ assert(!rsp);
rsp = qmp_error_response(err);
- } else if (ret) {
- rsp = qdict_new();
- qdict_put_obj(rsp, "return", ret);
- } else {
- /* Can only happen for commands with QCO_NO_SUCCESS_RESP */
- rsp = NULL;
}
- if (rsp && id) {
+ assert(rsp);
+
+ if (id) {
qdict_put_obj(rsp, "id", qobject_ref(id));
}
--
2.21.1
- [PULL 00/30] QAPI patches for 2020-03-17, Markus Armbruster, 2020/03/17
- [PULL 02/30] qemu-doc: Belatedly document QMP command arg & result deprecation, Markus Armbruster, 2020/03/17
- [PULL 11/30] tests/test-qmp-event: Check event is actually emitted, Markus Armbruster, 2020/03/17
- [PULL 01/30] docs/devel/qapi-code-gen: Fix typo in grammar, Markus Armbruster, 2020/03/17
- [PULL 20/30] qapi/schema: Call QAPIDoc.connect_member() in just one place, Markus Armbruster, 2020/03/17
- [PULL 07/30] tests/test-qmp-cmds: Check responses more thoroughly, Markus Armbruster, 2020/03/17
- [PULL 10/30] tests/test-qmp-event: Use qobject_is_equal(), Markus Armbruster, 2020/03/17
- [PULL 04/30] docs/devel/qapi-code-gen: Clarify allow-oob introspection, Markus Armbruster, 2020/03/17
- [PULL 06/30] tests/test-qmp-cmds: Factor out qmp_dispatch() test helpers, Markus Armbruster, 2020/03/17
- [PULL 05/30] docs/devel/qapi-code-gen: Document 'features' introspection, Markus Armbruster, 2020/03/17
- [PULL 23/30] qapi: Simplify how qmp_dispatch() deals with QCO_NO_SUCCESS_RESP,
Markus Armbruster <=
- [PULL 30/30] net: Track netdevs in NetClientState rather than QemuOpt, Markus Armbruster, 2020/03/17
- [PULL 08/30] tests/test-qmp-cmds: Simplify test data setup, Markus Armbruster, 2020/03/17
- [PULL 24/30] qapi: Simplify how qmp_dispatch() gets the request ID, Markus Armbruster, 2020/03/17
- [PULL 12/30] qapi/schema: Clean up around QAPISchemaEntity.connect_doc(), Markus Armbruster, 2020/03/17
- [PULL 09/30] tests/test-qmp-event: Simplify test data setup, Markus Armbruster, 2020/03/17
- [PULL 28/30] qmp: constify QmpCommand and list, Markus Armbruster, 2020/03/17
- [PULL 14/30] qapi: Consistently put @features parameter right after @ifcond, Markus Armbruster, 2020/03/17
- [PULL 19/30] qapi/schema: Rename QAPISchemaObjectType{Variant, Variants}, Markus Armbruster, 2020/03/17
- [PULL 26/30] qapi: New special feature flag "deprecated", Markus Armbruster, 2020/03/17
- [PULL 27/30] qapi: Mark deprecated QMP parts with feature 'deprecated', Markus Armbruster, 2020/03/17