summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPekka Paalanen <ppaalanen@gmail.com>2011-12-13 14:53:54 +0200
committerKristian Høgsberg <krh@bitplanet.net>2011-12-13 10:01:37 -0500
commite631ab6cde2fa0d0fe59cc4f5776c9a8b3002989 (patch)
tree429b703c9a62d3160a4e35d31997acecc73076f5
parent58bb064afa3bfc706e3b30dd170804235aa272ea (diff)
client: fix a strdup memory leak
Memory leak found by valgrinding simple-shm client. struct wl_global::interface is a strdup()'d string that was never freed. Make a function for freeing a wl_global, and use it. krh: Edit to name wl_global destructor wl_global_destroy. Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
-rw-r--r--src/wayland-client.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/wayland-client.c b/src/wayland-client.c
index 22244f8..836a31c 100644
--- a/src/wayland-client.c
+++ b/src/wayland-client.c
@@ -252,6 +252,14 @@ display_handle_global(void *data,
}
static void
+wl_global_destroy(struct wl_global *global)
+{
+ wl_list_remove(&global->link);
+ free(global->interface);
+ free(global);
+}
+
+static void
display_handle_global_remove(void *data,
struct wl_display *display, uint32_t id)
{
@@ -259,8 +267,7 @@ display_handle_global_remove(void *data,
wl_list_for_each(global, &display->global_list, link)
if (global->id == id) {
- wl_list_remove(&global->link);
- free(global);
+ wl_global_destroy(global);
break;
}
}
@@ -394,7 +401,7 @@ wl_display_destroy(struct wl_display *display)
wl_map_release(&display->objects);
wl_list_for_each_safe(global, gnext,
&display->global_list, link)
- free(global);
+ wl_global_destroy(global);
wl_list_for_each_safe(listener, lnext,
&display->global_listener_list, link)
free(listener);