wayland-client : Fix queue_release not to call proxy_destroy

proxy_destroy could be called twice by wl_proxy_destroy and wl_event_queue_release.
Then, wl_map_remove was called twice for same object id.

Signed-off-by: Elvis Lee <kwangwoong.lee@lge.com>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
This commit is contained in:
Elvis Lee 2015-07-31 18:02:54 +09:00 committed by Daniel Stone
parent bbe6795d9b
commit 441f9bb144

View file

@ -259,6 +259,7 @@ wl_event_queue_release(struct wl_event_queue *queue)
{
struct wl_closure *closure;
struct wl_proxy *proxy;
bool proxy_destroyed;
while (!wl_list_empty(&queue->event_list)) {
closure = container_of(queue->event_list.next,
@ -268,10 +269,11 @@ wl_event_queue_release(struct wl_event_queue *queue)
decrease_closure_args_refcount(closure);
proxy = closure->proxy;
if (proxy->refcount == 1)
proxy_destroy(proxy);
else
--proxy->refcount;
proxy_destroyed = !!(proxy->flags & WL_PROXY_FLAG_DESTROYED);
proxy->refcount--;
if (proxy_destroyed && !proxy->refcount)
free(proxy);
wl_closure_destroy(closure);
}