Do not leak globals and listeners.
authorLaszlo Agocs <laszlo.p.agocs@nokia.com>
Tue, 14 Jun 2011 09:41:54 +0000 (11:41 +0200)
committerKristian Høgsberg <krh@bitplanet.net>
Mon, 20 Jun 2011 15:25:29 +0000 (11:25 -0400)
 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.

wayland/wayland-client.c
wayland/wayland-server.c

index 932f8b4..6a27514 100644 (file)
@@ -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);
 }
index 886ec69..017db08 100644 (file)
@@ -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);
 }