summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Janků <jjanku@redhat.com>2020-10-28 17:07:21 +0100
committerJakub Janků <jjanku@redhat.com>2020-10-28 17:07:21 +0100
commit5a2471e24ed46f2fd84241dfeb2ba68d6e4ea397 (patch)
tree450a1e937eee6cfe9101ea47746c629f4d50844b
parent0c5b8fac0973f0cf6ca8c9cd3633fa3a8601478f (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.h2
-rw-r--r--src/vdagent/x11-randr.c6
-rw-r--r--src/vdagent/x11.c2
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);
}