Skip to content

Commit

Permalink
monitor: introduce monitor_qmp_respond()
Browse files Browse the repository at this point in the history
A tiny refactoring, preparing to split the QMP dispatcher away.

Reviewed-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Peter Xu <peterx@redhat.com>
Message-Id: <20180309090006.10018-12-peterx@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
[eblake: rebase to qobject_to() usage]
Signed-off-by: Eric Blake <eblake@redhat.com>
  • Loading branch information
xzpeter authored and ebblake committed Mar 19, 2018
1 parent 0213031 commit 546aa56
Showing 1 changed file with 33 additions and 17 deletions.
50 changes: 33 additions & 17 deletions monitor.c
Expand Up @@ -3822,6 +3822,38 @@ static int monitor_can_read(void *opaque)
return (mon->suspend_cnt == 0) ? 1 : 0;
}

/*
* 1. This function takes ownership of rsp, err, and id.
* 2. rsp, err, and id may be NULL.
* 3. If err != NULL then rsp must be NULL.
*/
static void monitor_qmp_respond(Monitor *mon, QObject *rsp,
Error *err, QObject *id)
{
QDict *qdict = NULL;

if (err) {
assert(!rsp);
qdict = qdict_new();
qdict_put_obj(qdict, "error", qmp_build_error_object(err));
error_free(err);
rsp = QOBJECT(qdict);
}

if (rsp) {
if (id) {
/* This is for the qdict below. */
qobject_incref(id);
qdict_put_obj(qobject_to(QDict, rsp), "id", id);
}

monitor_json_emitter(mon, rsp);
}

qobject_decref(id);
qobject_decref(rsp);
}

static void handle_qmp_command(JSONMessageParser *parser, GQueue *tokens)
{
QObject *req, *rsp = NULL, *id = NULL;
Expand Down Expand Up @@ -3873,24 +3905,8 @@ static void handle_qmp_command(JSONMessageParser *parser, GQueue *tokens)
}

err_out:
if (err) {
qdict = qdict_new();
qdict_put_obj(qdict, "error", qmp_build_error_object(err));
error_free(err);
rsp = QOBJECT(qdict);
}
monitor_qmp_respond(mon, rsp, err, id);

if (rsp) {
if (id) {
qdict_put_obj(qobject_to(QDict, rsp), "id", id);
id = NULL;
}

monitor_json_emitter(mon, rsp);
}

qobject_decref(id);
qobject_decref(rsp);
qobject_decref(req);
}

Expand Down

0 comments on commit 546aa56

Please sign in to comment.