qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH v3 26/38] qmp: fold do_qmp_dispatch() in qmp_dispatc


From: Marc-André Lureau
Subject: [Qemu-devel] [PATCH v3 26/38] qmp: fold do_qmp_dispatch() in qmp_dispatch()
Date: Mon, 26 Mar 2018 17:09:04 +0200

qmp_dispatch() is now a simple wrapper for do_qmp_dispatch(). In order
to prepare for following asynchronous function, merge the two
functions, which result in less code.

Signed-off-by: Marc-André Lureau <address@hidden>
---
 qapi/qmp-dispatch.c | 62 ++++++++++++++++++---------------------------
 1 file changed, 25 insertions(+), 37 deletions(-)

diff --git a/qapi/qmp-dispatch.c b/qapi/qmp-dispatch.c
index 92079c0621..4a73cf88b3 100644
--- a/qapi/qmp-dispatch.c
+++ b/qapi/qmp-dispatch.c
@@ -114,47 +114,50 @@ QDict *qmp_dispatch_check_obj(const QObject *request, 
Error **errp)
     return dict;
 }
 
-static QObject *do_qmp_dispatch(QmpCommandList *cmds, QDict *dict,
-                                Error **errp)
+void qmp_dispatch(QmpSession *session, QDict *req)
 {
-    Error *local_err = NULL;
     const char *command;
-    QDict *args;
+    QDict *args = NULL;
     QmpCommand *cmd;
-    QObject *ret = NULL;
+    Error *err = NULL;
 
-    command = qdict_get_str(dict, "execute");
-    cmd = qmp_find_command(cmds, command);
+    command = qdict_get_str(req, "execute");
+    cmd = qmp_find_command(session->cmds, command);
     if (cmd == NULL) {
-        error_set(errp, ERROR_CLASS_COMMAND_NOT_FOUND,
+        error_set(&err, ERROR_CLASS_COMMAND_NOT_FOUND,
                   "The command %s has not been found", command);
-        return NULL;
+        goto end;
     }
     if (!cmd->enabled) {
-        error_setg(errp, "The command %s has been disabled for this instance",
+        error_setg(&err, "The command %s has been disabled for this instance",
                    command);
-        return NULL;
+        goto end;
     }
 
-    if (!qdict_haskey(dict, "arguments")) {
+    if (!qdict_haskey(req, "arguments")) {
         args = qdict_new();
     } else {
-        args = qdict_get_qdict(dict, "arguments");
+        args = qdict_get_qdict(req, "arguments");
         QINCREF(args);
     }
 
-    cmd->fn(args, &ret, &local_err);
-    if (local_err) {
-        error_propagate(errp, local_err);
-    } else if (cmd->options & QCO_NO_SUCCESS_RESP) {
-        g_assert(!ret);
-    } else if (!ret) {
-        ret = QOBJECT(qdict_new());
+    {
+        QObject *ret = NULL;
+        cmd->fn(args, &ret, &err);
+        if (err || cmd->options & QCO_NO_SUCCESS_RESP) {
+            assert(!ret);
+            goto end;
+        } else if (!ret) {
+            ret = QOBJECT(qdict_new());
+        }
+        qmp_return(qmp_return_new(session, req), ret);
     }
 
+end:
+    if (err) {
+        qmp_return_error(qmp_return_new(session, req), err);
+    }
     QDECREF(args);
-
-    return ret;
 }
 
 /*
@@ -230,18 +233,3 @@ void qmp_session_destroy(QmpSession *session)
     session->return_cb = NULL;
     json_message_parser_destroy(&session->parser);
 }
-
-void qmp_dispatch(QmpSession *session, QDict *req)
-{
-    QmpReturn *qret = qmp_return_new(session, req);
-    Error *err = NULL;
-    QObject *ret;
-
-    ret = do_qmp_dispatch(session->cmds, req, &err);
-    if (err) {
-        assert(!ret);
-        qmp_return_error(qret, err);
-    } else if (ret) {
-        qmp_return(qret, ret);
-    }
-}
-- 
2.17.0.rc1.1.g4c4f2b46a3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]