} eom_output_notify_cb_info;
bool eom_debug_on;
+static bool eom_mutex_init;
static pthread_mutex_t eom_lock;
static bool
_eom_mutex_init(void)
{
- static bool init;
-
- if (init)
+ if (eom_mutex_init)
return true;
if (pthread_mutex_init(&eom_lock, NULL)) {
return false;
}
- init = true;
+ eom_mutex_init = true;
+
+ return true;
+}
+
+static bool
+_eom_mutex_destory(void)
+{
+ if (!eom_mutex_init)
+ return true;
+
+ if (pthread_mutex_destroy(&eom_lock)) {
+ fprintf(stderr, "fail: eom mutex destory");
+ return false;
+ }
+
+ eom_mutex_init = false;
return true;
}
API void
eom_deinit(void)
{
- GList *l;
+ GList *l = NULL;
_eom_mutex_lock();
#ifdef HAVE_WAYLAND
#else
eom_dbus_client_deinit(cb_info_list);
#endif
+ for (l = cb_info_list; l; l = cb_info_list) {
+ eom_output_notify_cb_info *cb_info = (eom_output_notify_cb_info *)l->data;
+
+ cb_info_list = g_list_remove(cb_info_list, cb_info);
+ free(cb_info);
+ }
+ cb_info_list = NULL;
/* TODO: redesign the life-cycle of output_infos */
/* destory output_info. */
_eom_free_output_info(&output_info);
}
+ output_info_list = NULL;
_eom_mutex_unlock();
+ _eom_mutex_destory();
+
INFO("eom deinit");
}
int ecore_count = -1;
ecore_count = ecore_wl_init(NULL);
- GOTO_IF_FAIL(ecore_count > 0, fail);
+ RETV_IF_FAIL(ecore_count > 0, false);
wl_list_init(&wl_client_info.eom_wl_output_list);
return true;
fail:
+
+ if (wl_client_info.registry) {
+ wl_registry_destroy(wl_client_info.registry);
+ wl_client_info.registry = NULL;
+ }
+
+ ecore_wl_shutdown();
+
return false;
}
eom_wl_output = NULL;
}
}
+
+ if (wl_client_info.registry) {
+ wl_registry_destroy(wl_client_info.registry);
+ wl_client_info.registry = NULL;
+ }
ecore_wl_shutdown();
INFO("[EOM_CLIENT] wayland client deinit.");