diff --git a/src/wayland-private.h b/src/wayland-private.h index 434cb04e..93cec6be 100644 --- a/src/wayland-private.h +++ b/src/wayland-private.h @@ -80,7 +80,8 @@ struct wl_map { }; typedef enum wl_iterator_result (*wl_iterator_func_t)(void *element, - void *data); + void *data, + uint32_t flags); void wl_map_init(struct wl_map *map, uint32_t side); diff --git a/src/wayland-server.c b/src/wayland-server.c index 61e03150..cd5501f7 100644 --- a/src/wayland-server.c +++ b/src/wayland-server.c @@ -658,11 +658,9 @@ resource_is_deprecated(struct wl_resource *resource) } static enum wl_iterator_result -destroy_resource(void *element, void *data) +destroy_resource(void *element, void *data, uint32_t flags) { struct wl_resource *resource = element; - struct wl_client *client = resource->client; - uint32_t flags; wl_signal_emit(&resource->deprecated_destroy_signal, resource); /* Don't emit the new signal for deprecated resources, as that would @@ -670,7 +668,6 @@ destroy_resource(void *element, void *data) if (!resource_is_deprecated(resource)) wl_priv_signal_emit(&resource->destroy_signal, resource); - flags = wl_map_lookup_flags(&client->objects, resource->object.id); if (resource->destroy) resource->destroy(resource); @@ -685,9 +682,11 @@ wl_resource_destroy(struct wl_resource *resource) { struct wl_client *client = resource->client; uint32_t id; + uint32_t flags; id = resource->object.id; - destroy_resource(resource, NULL); + flags = wl_map_lookup_flags(&client->objects, id); + destroy_resource(resource, NULL, flags); if (id < WL_SERVER_ID_START) { if (client->display_resource) { @@ -1839,7 +1838,7 @@ struct wl_resource_iterator_context { }; static enum wl_iterator_result -resource_iterator_helper(void *res, void *user_data) +resource_iterator_helper(void *res, void *user_data, uint32_t flags) { struct wl_resource_iterator_context *context = user_data; struct wl_resource *resource = res; diff --git a/src/wayland-util.c b/src/wayland-util.c index cab7fc50..ce387f4b 100644 --- a/src/wayland-util.c +++ b/src/wayland-util.c @@ -371,7 +371,7 @@ for_each_helper(struct wl_array *entries, wl_iterator_func_t func, void *data) for (p = start; p < end; p++) if (p->data && !map_entry_is_free(*p)) { - ret = func(map_entry_get_data(*p), data); + ret = func(map_entry_get_data(*p), data, map_entry_get_flags(*p)); if (ret != WL_ITERATOR_CONTINUE) break; }