[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v6 25/25] hmp: call the asynchronous QMP screendump to fix outdat
From: |
Marc-André Lureau |
Subject: |
[PATCH v6 25/25] hmp: call the asynchronous QMP screendump to fix outdated/glitches |
Date: |
Fri, 8 Nov 2019 19:01:23 +0400 |
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 <address@hidden>
---
hmp-commands.hx | 3 ++-
include/ui/console.h | 5 ++---
monitor/hmp-cmds.c | 6 ++----
ui/console.c | 32 --------------------------------
4 files changed, 6 insertions(+), 40 deletions(-)
diff --git a/hmp-commands.hx b/hmp-commands.hx
index cfcc044ce4..82b9236deb 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
diff --git a/include/ui/console.h b/include/ui/console.h
index a1935557cc..d0a2a2066f 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -6,6 +6,7 @@
#include "qemu/notify.h"
#include "qemu/error-report.h"
#include "qapi/qapi-types-ui.h"
+#include "qapi/qmp/dispatch.h"
#ifdef CONFIG_OPENGL
# include <epoxy/gl.h>
@@ -74,9 +75,7 @@ typedef struct MouseTransformInfo {
} MouseTransformInfo;
void hmp_mouse_set(Monitor *mon, const QDict *qdict);
-void hmp_screendump_sync(const char *filename,
- bool has_device, const char *device,
- bool has_head, int64_t head, Error **errp);
+void hmp_screendump_async(Monitor *mon, const QDict *qdict, QmpReturn *qret);
/* keysym is a unicode code except for special keys (see QEMU_KEY_xxx
constants) */
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
index c52e78fedf..93b061cf4f 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
@@ -2301,15 +2301,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 fd87605b7c..a6f8e34e61 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -417,38 +417,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);
- int fd;
-
- 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;
- }
-
- fd = qemu_open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666);
- if (fd == -1) {
- error_setg(errp, "failed to open file '%s': %s", filename,
- strerror(errno));
- return;
- }
-
- if (!ppm_save(fd, surface, errp)) {
- qemu_unlink(filename);
- }
-}
-
void qmp_screendump(const char *filename,
bool has_device, const char *device,
bool has_head, int64_t head,
--
2.24.0
- [PATCH v6 15/25] console: add graphic_hw_update_done(), (continued)
- [PATCH v6 15/25] console: add graphic_hw_update_done(), Marc-André Lureau, 2019/11/08
- [PATCH v6 16/25] ppm-save: pass opened fd, Marc-André Lureau, 2019/11/08
- [PATCH v6 17/25] ui: add pixman image g_autoptr support, Marc-André Lureau, 2019/11/08
- [PATCH v6 18/25] object: add g_autoptr support, Marc-André Lureau, 2019/11/08
- [PATCH v6 19/25] screendump: replace FILE with QIOChannel and fix close()/qemu_close(), Marc-André Lureau, 2019/11/08
- [PATCH v6 20/25] osdep: add qemu_unlink(), Marc-André Lureau, 2019/11/08
- [PATCH v6 21/25] screendump: use qemu_unlink(), Marc-André Lureau, 2019/11/08
- [PATCH v6 22/25] console: make screendump asynchronous, Marc-André Lureau, 2019/11/08
- [PATCH v6 23/25] monitor: start making qmp_human_monitor_command() asynchronous, Marc-André Lureau, 2019/11/08
- [PATCH v6 24/25] monitor: teach HMP about asynchronous commands, Marc-André Lureau, 2019/11/08
- [PATCH v6 25/25] hmp: call the asynchronous QMP screendump to fix outdated/glitches,
Marc-André Lureau <=