diff options
author | Laszlo Agocs <laszlo.p.agocs@nokia.com> | 2011-06-14 11:41:54 +0200 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2011-06-20 11:25:29 -0400 |
commit | 9c36ea776b48decd84828d0b51842c91e2c9124a (patch) | |
tree | 986fdc6324aaaa988d7b57063b835e96cab88a56 | |
parent | a2db57517b3648f52410c6861704b5c4190416c1 (diff) |
Do not leak globals and listeners.
From 3fa2ad7dec42f85795449f33b2a4c9461aa4924d Mon Sep 17 00:00:00 2001
From: Laszlo Agocs <laszlo.p.agocs@nokia.com>
Date: Tue, 14 Jun 2011 11:35:28 +0200
Subject: [PATCH] Do not leak globals and listeners.
-rw-r--r-- | wayland/wayland-client.c | 10 | ||||
-rw-r--r-- | wayland/wayland-server.c | 9 |
2 files changed, 16 insertions, 3 deletions
diff --git a/wayland/wayland-client.c b/wayland/wayland-client.c index 932f8b4..6a27514 100644 --- a/wayland/wayland-client.c +++ b/wayland/wayland-client.c @@ -413,8 +413,18 @@ wl_display_connect(const char *name) WL_EXPORT void wl_display_destroy(struct wl_display *display) { + struct wl_global *global, *gnext; + struct wl_global_listener *listener, *lnext; + wl_connection_destroy(display->connection); wl_hash_table_destroy(display->objects); + wl_list_for_each_safe(global, gnext, + &display->global_list, link) + free(global); + wl_list_for_each_safe(listener, lnext, + &display->global_listener_list, link) + free(listener); + close(display->fd); free(display); } diff --git a/wayland/wayland-server.c b/wayland/wayland-server.c index 886ec69..017db08 100644 --- a/wayland/wayland-server.c +++ b/wayland/wayland-server.c @@ -617,10 +617,10 @@ WL_EXPORT void wl_display_destroy(struct wl_display *display) { struct wl_socket *s, *next; + struct wl_global *global, *gnext; - wl_event_loop_destroy(display->loop); - wl_hash_table_destroy(display->objects); - + wl_event_loop_destroy(display->loop); + wl_hash_table_destroy(display->objects); wl_list_for_each_safe(s, next, &display->socket_list, link) { close(s->fd); unlink(s->addr.sun_path); @@ -629,6 +629,9 @@ wl_display_destroy(struct wl_display *display) free(s); } + wl_list_for_each_safe(global, gnext, &display->global_list, link) + free(global); + free(display); } |