[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 22/30] qapi: Simplify how qmp_dispatch() deals with QCO_NO_SUC
From: |
Markus Armbruster |
Subject: |
[PATCH v2 22/30] qapi: Simplify how qmp_dispatch() deals with QCO_NO_SUCCESS_RESP |
Date: |
Tue, 3 Mar 2020 17:34:57 +0100 |
Signed-off-by: Markus Armbruster <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
- [PATCH v2 05/30] tests/test-qmp-cmds: Factor out qmp_dispatch() test helpers, (continued)
- [PATCH v2 05/30] tests/test-qmp-cmds: Factor out qmp_dispatch() test helpers, Markus Armbruster, 2020/03/03
- [PATCH v2 11/30] qapi/schema: Clean up around QAPISchemaEntity.connect_doc(), Markus Armbruster, 2020/03/03
- [PATCH v2 24/30] qapi: Replace qmp_dispatch()'s TODO comment by an explanation, Markus Armbruster, 2020/03/03
- [PATCH v2 03/30] docs/devel/qapi-code-gen: Clarify allow-oob introspection, Markus Armbruster, 2020/03/03
- [PATCH v2 25/30] qapi: New special feature flag "deprecated", Markus Armbruster, 2020/03/03
- [PATCH v2 27/30] qemu-options: New -compat to set policy for deprecated interfaces, Markus Armbruster, 2020/03/03
- [PATCH v2 07/30] tests/test-qmp-cmds: Simplify test data setup, Markus Armbruster, 2020/03/03
- [PATCH v2 18/30] qapi/schema: Rename QAPISchemaObjectType{Variant, Variants}, Markus Armbruster, 2020/03/03
- [PATCH v2 08/30] tests/test-qmp-event: Simplify test data setup, Markus Armbruster, 2020/03/03
- [PATCH v2 01/30] qemu-doc: Belatedly document QMP command arg & result deprecation, Markus Armbruster, 2020/03/03
- [PATCH v2 22/30] qapi: Simplify how qmp_dispatch() deals with QCO_NO_SUCCESS_RESP,
Markus Armbruster <=
- [PATCH v2 12/30] qapi: Add feature flags to remaining definitions, Markus Armbruster, 2020/03/03
- [PATCH v2 15/30] qapi/introspect: Factor out _make_tree(), Markus Armbruster, 2020/03/03
- [PATCH v2 30/30] qapi: New -compat deprecated-input=crash, Markus Armbruster, 2020/03/03
- [PATCH v2 17/30] qapi/schema: Reorder classes so related ones are together, Markus Armbruster, 2020/03/03
- [PATCH v2 21/30] qapi: Inline do_qmp_dispatch() into qmp_dispatch(), Markus Armbruster, 2020/03/03
- [PATCH v2 29/30] qapi: Implement -compat deprecated-input=reject, Markus Armbruster, 2020/03/03
- [PATCH v2 28/30] qapi: Implement -compat deprecated-output=hide, Markus Armbruster, 2020/03/03
- [PATCH v2 26/30] qapi: Mark deprecated QMP parts with feature 'deprecated', Markus Armbruster, 2020/03/03
- [PATCH v2 06/30] tests/test-qmp-cmds: Check responses more thoroughly, Markus Armbruster, 2020/03/03
- [PATCH v2 23/30] qapi: Simplify how qmp_dispatch() gets the request ID, Markus Armbruster, 2020/03/03