[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC v3 15/27] monitor: introduce monitor_qmp_respond()
From: |
Fam Zheng |
Subject: |
Re: [Qemu-devel] [RFC v3 15/27] monitor: introduce monitor_qmp_respond() |
Date: |
Tue, 7 Nov 2017 15:24:36 +0800 |
User-agent: |
Mutt/1.9.1 (2017-09-22) |
On Mon, 11/06 17:46, Peter Xu wrote:
> A tiny refactoring, preparing to split the QMP dispatcher away.
>
> Signed-off-by: Peter Xu <address@hidden>
> ---
> monitor.c | 48 +++++++++++++++++++++++++++++++-----------------
> 1 file changed, 31 insertions(+), 17 deletions(-)
>
> diff --git a/monitor.c b/monitor.c
> index 442d711d5d..1e87de87f8 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -3877,6 +3877,36 @@ static int monitor_can_read(void *opaque)
> return (mon->suspend_cnt == 0) ? 1 : 0;
> }
>
> +/*
> + * When rsp/err/id is passed in, the function will be responsible for
> + * the cleanup.
> + */
> +static void monitor_qmp_respond(Monitor *mon, QObject *rsp,
> + Error *err, QObject *id)
> +{
> + QDict *qdict = NULL;
> +
> + if (err) {
> + 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);
A small change from the old code (that does no incref, and sets id to NULL
afterwards to the final qobject_decref(id) is no-op), but looks correct.
Reviewed-by: Fam Zheng <address@hidden>
> + 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,
> void *opaque)
> {
> @@ -3927,24 +3957,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);
> }
>
> --
> 2.13.5
>
- Re: [Qemu-devel] [RFC v3 10/27] monitor: create monitor dedicate iothread, (continued)
[Qemu-devel] [RFC v3 11/27] monitor: allow to use IO thread for parsing, Peter Xu, 2017/11/06
[Qemu-devel] [RFC v3 12/27] qmp: introduce QMPCapability, Peter Xu, 2017/11/06
[Qemu-devel] [RFC v3 13/27] qmp: negociate QMP capabilities, Peter Xu, 2017/11/06
[Qemu-devel] [RFC v3 14/27] qmp: introduce some capability helpers, Peter Xu, 2017/11/06
[Qemu-devel] [RFC v3 15/27] monitor: introduce monitor_qmp_respond(), Peter Xu, 2017/11/06
- Re: [Qemu-devel] [RFC v3 15/27] monitor: introduce monitor_qmp_respond(),
Fam Zheng <=
[Qemu-devel] [RFC v3 16/27] monitor: let monitor_{suspend|resume} thread safe, Peter Xu, 2017/11/06
[Qemu-devel] [RFC v3 17/27] monitor: separate QMP parser and dispatcher, Peter Xu, 2017/11/06
[Qemu-devel] [RFC v3 18/27] qmp: add new event "request-dropped", Peter Xu, 2017/11/06
[Qemu-devel] [RFC v3 19/27] monitor: send event when request queue full, Peter Xu, 2017/11/06
[Qemu-devel] [RFC v3 20/27] qapi: introduce new cmd option "allow-oob", Peter Xu, 2017/11/06