wayland-server: Free non-legacy wl_resource structs during wl_client_destroy
authorKristian Høgsberg <krh@bitplanet.net>
Tue, 2 Jul 2013 20:59:44 +0000 (16:59 -0400)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 2 Jul 2013 21:01:46 +0000 (17:01 -0400)
We need to free the non-legacy resources during client shutdown as well.

src/wayland-server.c

index 5410553..32310b1 100644 (file)
@@ -422,11 +422,17 @@ static void
 destroy_resource(void *element, void *data)
 {
        struct wl_resource *resource = element;
+       struct wl_client *client = resource->client;
+       uint32_t flags;
 
        wl_signal_emit(&resource->destroy_signal, resource);
 
+       flags = wl_map_lookup_flags(&client->objects, resource->object.id);
        if (resource->destroy)
                resource->destroy(resource);
+
+       if (!(flags & WL_MAP_ENTRY_LEGACY))
+               free(resource);
 }
 
 WL_EXPORT void
@@ -438,9 +444,6 @@ wl_resource_destroy(struct wl_resource *resource)
        id = resource->object.id;
        destroy_resource(resource, NULL);
 
-       if (!(wl_map_lookup_flags(&client->objects, id) & WL_MAP_ENTRY_LEGACY))
-               free(resource);
-
        if (id < WL_SERVER_ID_START) {
                if (client->display_resource) {
                        wl_resource_queue_event(client->display_resource,