{
twe_wl_disp_source *disp_source = (twe_wl_disp_source *)source;
- TPL_OBJECT_LOCK(&disp_source->obj);
-
- /* If disp_source is in prepared state, cancel it */
- if (disp_source->prepared) {
- wl_display_cancel_read(disp_source->disp);
- disp_source->prepared = TPL_FALSE;
- }
-
- if (wl_display_dispatch_queue_pending(disp_source->disp,
- disp_source->ev_queue) == -1) {
- _twe_display_print_err(disp_source, "dispatch_queue_pending");
- }
-
- TPL_LOG_T("WL_EGL", "finalize| wl_event_queue(%p)",
- disp_source->ev_queue);
-
- wl_event_queue_destroy(disp_source->ev_queue);
- TPL_OBJECT_UNLOCK(&disp_source->obj);
+ TPL_LOG_T("WL_EGL", "finalize| disp_source(%p)", disp_source);
__tpl_object_fini(&disp_source->obj);
return;
}
+ TPL_OBJECT_LOCK(&disp_source->obj);
+
+ /* If disp_source is in prepared state, cancel it */
+ if (disp_source->prepared) {
+ wl_display_cancel_read(disp_source->disp);
+ disp_source->prepared = TPL_FALSE;
+ }
+
+ if (wl_display_dispatch_queue_pending(disp_source->disp,
+ disp_source->ev_queue) == -1) {
+ _twe_display_print_err(disp_source, "dispatch_queue_pending");
+ }
+
+ wl_event_queue_destroy(disp_source->ev_queue);
+ TPL_OBJECT_UNLOCK(&disp_source->obj);
+
g_source_remove_poll(&disp_source->gsource, &disp_source->gfd);
g_source_destroy(&disp_source->gsource);
- g_source_unref(&disp_source->gsource);
TPL_LOG_T("WL_EGL", "[DEL] twe_display(%p) wl_display(%p)",
disp_source, disp_source->disp);
g_source_set_callback(&source->gsource, NULL, display, NULL);
g_source_add_poll(&source->gsource, &source->gfd);
g_source_attach(&source->gsource, g_main_loop_get_context(ctx->twe_loop));
- g_source_unref(&source->gsource);
TPL_LOG_T("WL_EGL", "add| gsource(%p) ev_queue(%p) wl_display(%p)",
source, source->ev_queue, display);
/* Waiting for destroying disp_source */
}
+ g_source_unref(&source->gsource);
+
_twe_display_del_source_fini(disp_del_source);
return TPL_ERROR_NONE;