tpl_wayland_egl_thread: Modify creating event queue for multi-threaded usage 94/161094/2
authorHoyub Lee <hoyub.lee@samsung.com>
Tue, 21 Nov 2017 11:24:14 +0000 (20:24 +0900)
committerHoyub Lee <hoyub.lee@samsung.com>
Wed, 22 Nov 2017 04:36:07 +0000 (13:36 +0900)
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 <hoyub.lee@samsung.com>
src/tpl_wayland_egl_thread.c

index 3e1d2b3..9a863bd 100644 (file)
@@ -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, &registry_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);
 }