diff options
author | Pekka Paalanen <ppaalanen@gmail.com> | 2011-12-13 14:53:54 +0200 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2011-12-13 10:01:37 -0500 |
commit | e631ab6cde2fa0d0fe59cc4f5776c9a8b3002989 (patch) | |
tree | 429b703c9a62d3160a4e35d31997acecc73076f5 /src | |
parent | 58bb064afa3bfc706e3b30dd170804235aa272ea (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>
Diffstat (limited to 'src')
-rw-r--r-- | src/wayland-client.c | 13 |
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); |