[PATCH wayland] wayland-client : Fix queue_release not to call proxy_destroy
Elvis Lee
kwangwoong.lee at lge.com
Fri Jul 31 02:02:54 PDT 2015
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 at lge.com>
---
src/wayland-client.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/src/wayland-client.c b/src/wayland-client.c
index 0f1405c..a593f7f 100644
--- a/src/wayland-client.c
+++ b/src/wayland-client.c
@@ -256,6 +256,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,
@@ -265,10 +266,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);
}
--
1.7.9.5
More information about the wayland-devel
mailing list