[PATCH wayland] wayland-client : Fix duplicated proxy destroy
jadahl at gmail.com
Fri Jul 31 00:50:05 PDT 2015
On Fri, Jul 31, 2015 at 04:04:14PM +0900, Elvis Lee wrote:
> proxy_destroy can be called twice by wl_proxy_destroy and wl_event_queue_release.
> In that case, wl_map_remove should be called only once for same object id.
> Signed-off-by: Elvis Lee <kwangwoong.lee at lge.com>
Yepp. In 5c70c031 we started to destroy proxies when they were lingering
in a queue that was being released. But if such a proxy had been both
explicitly destroyed (with wl_proxy_destroy) and deleted via the
delete_id event but not be dispatched by the queue we'd now remove it
from the map twice.
However, I think we should rather do the same as when dispatching when
releasing from the queue, i.e:
1. check whether the proxy had been destroyed (proxy->flags &
2. decrease the reference count, and free if we are the last holder.
Calling "destroy_proxy" in queue_release I believe is incorrect; the
original idea with WL_PROXY_FLAG_DESTROYED was that it had been
destroyed via wl_proxy_destroy.
> src/wayland-client.c | 4 ++++
> 1 file changed, 4 insertions(+)
> diff --git a/src/wayland-client.c b/src/wayland-client.c
> index 6450b67..b087ed3 100644
> --- a/src/wayland-client.c
> +++ b/src/wayland-client.c
> @@ -405,6 +405,9 @@ wl_proxy_create_for_id(struct wl_proxy *factory,
> proxy_destroy(struct wl_proxy *proxy)
> + if (proxy->flags & WL_PROXY_FLAG_DESTROYED)
> + goto unreference;
> if (proxy->flags & WL_PROXY_FLAG_ID_DELETED)
> wl_map_remove(&proxy->display->objects, proxy->object.id);
> else if (proxy->object.id < WL_SERVER_ID_START)
> @@ -417,6 +420,7 @@ proxy_destroy(struct wl_proxy *proxy)
> proxy->flags |= WL_PROXY_FLAG_DESTROYED;
> if (!proxy->refcount)
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
More information about the wayland-devel