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 | 22 ---------------------- hmp-commands.hx | 3 ++- 4 files changed, 6 insertions(+), 28 deletions(-) diff --git a/hmp.h b/hmp.h index 43617f2646..4059c8bea9 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); @@ -102,7 +103,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 9428c90c5d..60d2bc1c76 100644 --- a/hmp.c +++ b/hmp.c @@ -2373,15 +2373,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 620cd14b80..c259cf68aa 100644 --- a/ui/console.c +++ b/ui/console.c @@ -429,28 +429,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); - if (!surface) { - error_setg(errp, "no surface"); - return; - } - - 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 9b4035965c..638b59e764 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -278,7 +278,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.21.0.196.g041f5ea1cf