Revision de253f14 monitor.c

b/monitor.c
353 353
    QDECREF(json);
354 354
}
355 355

  
356
static QDict *build_qmp_error_dict(const QError *err)
357
{
358
    QObject *obj;
359

  
360
    obj = qobject_from_jsonf("{ 'error': { 'class': %s, 'desc': %p } }",
361
                             ErrorClass_lookup[err->err_class],
362
                             qerror_human(err));
363

  
364
    return qobject_to_qdict(obj);
365
}
366

  
356 367
static void monitor_protocol_emitter(Monitor *mon, QObject *data)
357 368
{
358 369
    QDict *qmp;
359 370

  
360 371
    trace_monitor_protocol_emitter(mon);
361 372

  
362
    qmp = qdict_new();
363

  
364 373
    if (!monitor_has_error(mon)) {
365 374
        /* success response */
375
        qmp = qdict_new();
366 376
        if (data) {
367 377
            qobject_incref(data);
368 378
            qdict_put_obj(qmp, "return", data);
......
372 382
        }
373 383
    } else {
374 384
        /* error response */
375
        qdict_put(mon->error->error, "desc", qerror_human(mon->error));
376
        qdict_put(qmp, "error", mon->error->error);
377
        QINCREF(mon->error->error);
385
        qmp = build_qmp_error_dict(mon->error);
378 386
        QDECREF(mon->error);
379 387
        mon->error = NULL;
380 388
    }

Also available in: Unified diff