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>
This commit is contained in:
Pekka Paalanen 2011-12-13 14:53:54 +02:00 committed by Kristian Høgsberg
parent 58bb064afa
commit e631ab6cde

View file

@ -251,6 +251,14 @@ display_handle_global(void *data,
id, interface, version, listener->data); id, interface, version, listener->data);
} }
static void
wl_global_destroy(struct wl_global *global)
{
wl_list_remove(&global->link);
free(global->interface);
free(global);
}
static void static void
display_handle_global_remove(void *data, display_handle_global_remove(void *data,
struct wl_display *display, uint32_t id) 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) wl_list_for_each(global, &display->global_list, link)
if (global->id == id) { if (global->id == id) {
wl_list_remove(&global->link); wl_global_destroy(global);
free(global);
break; break;
} }
} }
@ -394,7 +401,7 @@ wl_display_destroy(struct wl_display *display)
wl_map_release(&display->objects); wl_map_release(&display->objects);
wl_list_for_each_safe(global, gnext, wl_list_for_each_safe(global, gnext,
&display->global_list, link) &display->global_list, link)
free(global); wl_global_destroy(global);
wl_list_for_each_safe(listener, lnext, wl_list_for_each_safe(listener, lnext,
&display->global_listener_list, link) &display->global_listener_list, link)
free(listener); free(listener);