Skip to content

Commit

Permalink
qmp: Simplify monitor_qmp_respond()
Browse files Browse the repository at this point in the history
monitor_qmp_respond() takes both a response object and an error
object.  If an error object is non-null, the response object must be
null, and the response is built from the error object.

Of the two callers, one always passes a null response object, and one
a null error object.  Move building the response object from the error
object to the latter, and drop the error object parameter.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-Id: <20180703085358.13941-27-armbru@redhat.com>
  • Loading branch information
Markus Armbruster committed Jul 3, 2018
1 parent 1816604 commit 7cb2123
Showing 1 changed file with 10 additions and 16 deletions.
26 changes: 10 additions & 16 deletions monitor.c
Expand Up @@ -4100,28 +4100,19 @@ static int monitor_can_read(void *opaque)
}

/*
* 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.
* Emit QMP response @rsp with ID @id to @mon.
* Null @rsp can only happen for commands with QCO_NO_SUCCESS_RESP.
* Nothing is emitted then.
*/
static void monitor_qmp_respond(Monitor *mon, QDict *rsp,
Error *err, QObject *id)
static void monitor_qmp_respond(Monitor *mon, QDict *rsp, QObject *id)
{
if (err) {
assert(!rsp);
rsp = qmp_error_response(err);
}

if (rsp) {
if (id) {
qdict_put_obj(rsp, "id", qobject_ref(id));
}

qmp_queue_response(mon, rsp);
}

qobject_unref(id);
qobject_unref(rsp);
}

static void monitor_qmp_dispatch(Monitor *mon, QObject *req, QObject *id)
Expand Down Expand Up @@ -4149,8 +4140,8 @@ static void monitor_qmp_dispatch(Monitor *mon, QObject *req, QObject *id)
}
}

/* Respond if necessary */
monitor_qmp_respond(mon, rsp, NULL, qobject_ref(id));
monitor_qmp_respond(mon, rsp, id);
qobject_unref(rsp);
}

/*
Expand Down Expand Up @@ -4193,6 +4184,7 @@ static QMPRequest *monitor_qmp_requests_pop_any(void)
static void monitor_qmp_bh_dispatcher(void *data)
{
QMPRequest *req_obj = monitor_qmp_requests_pop_any();
QDict *rsp;

if (!req_obj) {
return;
Expand All @@ -4203,7 +4195,9 @@ static void monitor_qmp_bh_dispatcher(void *data)
monitor_qmp_dispatch(req_obj->mon, req_obj->req, req_obj->id);
} else {
assert(req_obj->err);
monitor_qmp_respond(req_obj->mon, NULL, req_obj->err, NULL);
rsp = qmp_error_response(req_obj->err);
monitor_qmp_respond(req_obj->mon, rsp, NULL);
qobject_unref(rsp);
}

if (req_obj->need_resume) {
Expand Down

0 comments on commit 7cb2123

Please sign in to comment.