From dcfd4d916767ec7d7cf5c3277f03465c718efb15 Mon Sep 17 00:00:00 2001 From: Hoyub Lee Date: Tue, 21 Nov 2017 20:24:14 +0900 Subject: [PATCH] tpl_wayland_egl_thread: Modify creating event queue for multi-threaded usage MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit In multi-threaded wayland, below is guided on creating own event queue: Create wl_interface object with a specified event queue, instead of creating an object and then changing it’s queue. This patch applies this guideline on where creating own event queue. Change-Id: I7c08ad93f1f0719ad9093ab252659efe1bd87f07 Signed-off-by: Hoyub Lee --- src/tpl_wayland_egl_thread.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/tpl_wayland_egl_thread.c b/src/tpl_wayland_egl_thread.c index 3e1d2b3..9a863bd 100644 --- a/src/tpl_wayland_egl_thread.c +++ b/src/tpl_wayland_egl_thread.c @@ -675,6 +675,7 @@ _twe_display_shm_init(twe_wl_disp_source *disp_source) { struct wl_registry *registry = NULL; struct wl_event_queue *queue = NULL; + struct wl_display *display_wrapper = NULL; int ret; queue = wl_display_create_queue(disp_source->disp); @@ -683,13 +684,23 @@ _twe_display_shm_init(twe_wl_disp_source *disp_source) goto fini; } - registry = wl_display_get_registry(disp_source->disp); + display_wrapper = wl_proxy_create_wrapper(disp_source->disp); + if (!display_wrapper) { + TPL_ERR("Failed to create a proxy wrapper of wl_display"); + goto fini; + } + + wl_proxy_set_queue((struct wl_proxy *)display_wrapper, queue); + + registry = wl_display_get_registry(display_wrapper); if (!registry) { TPL_ERR("Failed to create wl_registry"); goto fini; } - wl_proxy_set_queue((struct wl_proxy *)registry, queue); + wl_proxy_wrapper_destroy(display_wrapper); + display_wrapper = NULL; + if (wl_registry_add_listener(registry, ®istry_listener, disp_source)) { TPL_ERR("Failed to wl_registry_add_listener"); @@ -712,6 +723,8 @@ _twe_display_shm_init(twe_wl_disp_source *disp_source) fini: if (queue) wl_event_queue_destroy(queue); + if (display_wrapper) + wl_proxy_wrapper_destroy(display_wrapper); if (registry) wl_registry_destroy(registry); } -- 2.7.4