[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 09/18] ui/vdagent: disconnect handlers and reset state on finalize
From: |
marcandre . lureau |
Subject: |
[PULL 09/18] ui/vdagent: disconnect handlers and reset state on finalize |
Date: |
Tue, 31 Aug 2021 17:31:23 +0400 |
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Avoid handlers being called with dangling pointers when the object is
freed.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20210805135715.857938-10-marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
---
ui/vdagent.c | 25 +++++++++++++++----------
1 file changed, 15 insertions(+), 10 deletions(-)
diff --git a/ui/vdagent.c b/ui/vdagent.c
index 5ae5734c81..1a29016e07 100644
--- a/ui/vdagent.c
+++ b/ui/vdagent.c
@@ -721,22 +721,26 @@ static void vdagent_chr_accept_input(Chardev *chr)
vdagent_send_buf(vd);
}
+static void vdagent_disconnect(VDAgentChardev *vd)
+{
+ vdagent_reset_bufs(vd);
+ vd->caps = 0;
+ if (vd->mouse_hs) {
+ qemu_input_handler_deactivate(vd->mouse_hs);
+ }
+ if (vd->cbpeer.update.notify) {
+ qemu_clipboard_peer_unregister(&vd->cbpeer);
+ memset(&vd->cbpeer, 0, sizeof(vd->cbpeer));
+ }
+}
+
static void vdagent_chr_set_fe_open(struct Chardev *chr, int fe_open)
{
VDAgentChardev *vd = QEMU_VDAGENT_CHARDEV(chr);
if (!fe_open) {
trace_vdagent_close();
- /* reset state */
- vdagent_reset_bufs(vd);
- vd->caps = 0;
- if (vd->mouse_hs) {
- qemu_input_handler_deactivate(vd->mouse_hs);
- }
- if (vd->cbpeer.update.notify) {
- qemu_clipboard_peer_unregister(&vd->cbpeer);
- memset(&vd->cbpeer, 0, sizeof(vd->cbpeer));
- }
+ vdagent_disconnect(vd);
return;
}
@@ -781,6 +785,7 @@ static void vdagent_chr_fini(Object *obj)
{
VDAgentChardev *vd = QEMU_VDAGENT_CHARDEV(obj);
+ vdagent_disconnect(vd);
buffer_free(&vd->outbuf);
}
--
2.33.0.rc2
- [PULL 00/18] UI/clipboard fixes, marcandre . lureau, 2021/08/31
- [PULL 01/18] ui/vdagent: fix leak on error path, marcandre . lureau, 2021/08/31
- [PULL 02/18] ui/vdagent: remove copy-pasta comment, marcandre . lureau, 2021/08/31
- [PULL 03/18] ui/gtk-clipboard: use existing macros, marcandre . lureau, 2021/08/31
- [PULL 04/18] ui/gtk-clipboard: fix clipboard enum typo, marcandre . lureau, 2021/08/31
- [PULL 05/18] ui/clipboard: add helper to retrieve current clipboard, marcandre . lureau, 2021/08/31
- [PULL 06/18] ui/clipboard: add qemu_clipboard_peer_owns() helper, marcandre . lureau, 2021/08/31
- [PULL 07/18] ui/clipboard: add qemu_clipboard_peer_release() helper, marcandre . lureau, 2021/08/31
- [PULL 08/18] ui/clipboard: release owned grabs on unregister, marcandre . lureau, 2021/08/31
- [PULL 09/18] ui/vdagent: disconnect handlers and reset state on finalize,
marcandre . lureau <=
- [PULL 10/18] ui/vdagent: reset outbuf on disconnect, marcandre . lureau, 2021/08/31
- [PULL 11/18] ui/vdagent: split clipboard recv message handling, marcandre . lureau, 2021/08/31
- [PULL 12/18] ui/vdagent: use qemu_clipboard_peer_release helper, marcandre . lureau, 2021/08/31
- [PULL 13/18] ui/vdagent: use qemu_clipboard_info helper, marcandre . lureau, 2021/08/31
- [PULL 14/18] ui/vdagent: send empty clipboard when unhandled, marcandre . lureau, 2021/08/31
- [PULL 15/18] ui/gtk-clipboard: use qemu_clipboard_info helper, marcandre . lureau, 2021/08/31
- [PULL 16/18] ui/vdagent: send release when no clipboard owner, marcandre . lureau, 2021/08/31
- [PULL 17/18] ui/gtk-clipboard: emit release clipboard events, marcandre . lureau, 2021/08/31
- [PULL 18/18] ui/vdagent: add a migration blocker, marcandre . lureau, 2021/08/31
- Re: [PULL 00/18] UI/clipboard fixes, Peter Maydell, 2021/08/31