diff options
author | Jakub Janků <jjanku@redhat.com> | 2020-10-28 17:07:21 +0100 |
---|---|---|
committer | Jakub Janků <jjanku@redhat.com> | 2020-10-28 17:07:21 +0100 |
commit | 5a2471e24ed46f2fd84241dfeb2ba68d6e4ea397 (patch) | |
tree | 450a1e937eee6cfe9101ea47746c629f4d50844b | |
parent | 0c5b8fac0973f0cf6ca8c9cd3633fa3a8601478f (diff) |
x11-randr: fix leak on vdagent_x11 destroy
In vdagent_x11_destroy(), only x11->randr.failed_conf is freed
and x11->randr.{res, outputs, crtcs} are left allocated.
To fix it, create a new function vdagent_x11_randr_destroy()
that frees all randr resources, and call it from vdagent_x11_destroy().
Signed-off-by: Jakub Janků <jjanku@redhat.com>
-rw-r--r-- | src/vdagent/x11-priv.h | 2 | ||||
-rw-r--r-- | src/vdagent/x11-randr.c | 6 | ||||
-rw-r--r-- | src/vdagent/x11.c | 2 |
3 files changed, 9 insertions, 1 deletions
diff --git a/src/vdagent/x11-priv.h b/src/vdagent/x11-priv.h index 805d124..49bbbea 100644 --- a/src/vdagent/x11-priv.h +++ b/src/vdagent/x11-priv.h @@ -164,6 +164,8 @@ extern int (*vdagent_x11_prev_error_handler)(Display *, XErrorEvent *); extern int vdagent_x11_caught_error; void vdagent_x11_randr_init(struct vdagent_x11 *x11); +void vdagent_x11_randr_destroy(struct vdagent_x11 *x11); + GArray *vdagent_x11_get_resolutions(struct vdagent_x11 *x11, gboolean update, int *width, int *height, int *system_screen_count); void vdagent_x11_randr_handle_root_size_change(struct vdagent_x11 *x11, diff --git a/src/vdagent/x11-randr.c b/src/vdagent/x11-randr.c index 52d3de6..27404a1 100644 --- a/src/vdagent/x11-randr.c +++ b/src/vdagent/x11-randr.c @@ -171,6 +171,12 @@ void vdagent_x11_randr_init(struct vdagent_x11 *x11) } } +void vdagent_x11_randr_destroy(struct vdagent_x11 *x11) +{ + free_randr_resources(x11); + g_free(x11->randr.failed_conf); +} + static XRRModeInfo * find_mode_by_name (struct vdagent_x11 *x11, char *name) { diff --git a/src/vdagent/x11.c b/src/vdagent/x11.c index bb738c5..05a41d7 100644 --- a/src/vdagent/x11.c +++ b/src/vdagent/x11.c @@ -333,7 +333,7 @@ void vdagent_x11_destroy(struct vdagent_x11 *x11, int vdagentd_disconnected) g_hash_table_destroy(x11->guest_output_map); XCloseDisplay(x11->display); - g_free(x11->randr.failed_conf); + vdagent_x11_randr_destroy(x11); g_free(x11); } |