In order to fix the bad screendumps (same as rhbz#1230527), call into the asynchonous version of the QMP command.
Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> --- hmp.h | 3 ++- hmp.c | 6 ++---- ui/console.c | 17 ----------------- hmp-commands.hx | 3 ++- 4 files changed, 6 insertions(+), 23 deletions(-) diff --git a/hmp.h b/hmp.h index 4e2ec375b0..6ad43b7828 100644 --- a/hmp.h +++ b/hmp.h @@ -16,6 +16,7 @@ #include "qemu-common.h" #include "qemu/readline.h" +#include "qapi/qmp/dispatch.h" void hmp_info_name(Monitor *mon, const QDict *qdict); void hmp_info_version(Monitor *mon, const QDict *qdict); @@ -96,7 +97,7 @@ void hmp_netdev_del(Monitor *mon, const QDict *qdict); void hmp_getfd(Monitor *mon, const QDict *qdict); void hmp_closefd(Monitor *mon, const QDict *qdict); void hmp_sendkey(Monitor *mon, const QDict *qdict); -void hmp_screendump(Monitor *mon, const QDict *qdict); +void hmp_screendump_async(Monitor *mon, const QDict *qdict, QmpReturn *qret); void hmp_nbd_server_start(Monitor *mon, const QDict *qdict); void hmp_nbd_server_add(Monitor *mon, const QDict *qdict); void hmp_nbd_server_remove(Monitor *mon, const QDict *qdict); diff --git a/hmp.c b/hmp.c index da9008fe63..ca1ee8e146 100644 --- a/hmp.c +++ b/hmp.c @@ -2137,15 +2137,13 @@ err_out: goto out; } -void hmp_screendump(Monitor *mon, const QDict *qdict) +void hmp_screendump_async(Monitor *mon, const QDict *qdict, QmpReturn *qret) { const char *filename = qdict_get_str(qdict, "filename"); const char *id = qdict_get_try_str(qdict, "device"); int64_t head = qdict_get_try_int(qdict, "head", 0); - Error *err = NULL; - hmp_screendump_sync(filename, id != NULL, id, id != NULL, head, &err); - hmp_handle_error(mon, &err); + qmp_screendump(filename, id != NULL, id, id != NULL, head, qret); } void hmp_nbd_server_start(Monitor *mon, const QDict *qdict) diff --git a/ui/console.c b/ui/console.c index da51861191..f1cbbd6317 100644 --- a/ui/console.c +++ b/ui/console.c @@ -426,23 +426,6 @@ static QemuConsole *get_console(bool has_device, const char *device, return con; } -void hmp_screendump_sync(const char *filename, - bool has_device, const char *device, - bool has_head, int64_t head, Error **errp) -{ - DisplaySurface *surface; - QemuConsole *con = get_console(has_device, device, has_head, head, errp); - - if (!con) { - return; - } - /* This may not complete the drawing with Spice, you may have - * glitches or outdated dumps, use qmp instead! */ - graphic_hw_update(con); - surface = qemu_console_surface(con); - ppm_save(filename, surface, errp); -} - void qmp_screendump(const char *filename, bool has_device, const char *device, bool has_head, int64_t head, diff --git a/hmp-commands.hx b/hmp-commands.hx index 35d862a5d2..4911fc6474 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -258,7 +258,8 @@ ETEXI .params = "filename [device [head]]", .help = "save screen from head 'head' of display device 'device' " "into PPM image 'filename'", - .cmd = hmp_screendump, + .async_cmd = hmp_screendump_async, + .async = true, }, STEXI -- 2.17.0.rc1.1.g4c4f2b46a3