enhance resource management 64/75664/1
authorJunkyeong Kim <jk0430.kim@samsung.com>
Tue, 21 Jun 2016 02:18:12 +0000 (11:18 +0900)
committerJunkyeong Kim <jk0430.kim@samsung.com>
Tue, 21 Jun 2016 02:20:48 +0000 (11:20 +0900)
Change-Id: I907d0abf9f314e465c80865cfc77b7bd6a77b7c1
Signed-off-by: Junkyeong Kim <jk0430.kim@samsung.com>
src/eom.c [changed mode: 0755->0644]
src/wayland/eom-wayland.c

old mode 100755 (executable)
new mode 100644 (file)
index d3369d7..7204c3e
--- a/src/eom.c
+++ b/src/eom.c
@@ -105,6 +105,7 @@ typedef struct {
 } eom_output_notify_cb_info;
 
 bool eom_debug_on;
+static bool eom_mutex_init;
 
 static pthread_mutex_t eom_lock;
 
@@ -175,9 +176,7 @@ _eom_get_debug_evn(void)
 static bool
 _eom_mutex_init(void)
 {
-       static bool init;
-
-       if (init)
+       if (eom_mutex_init)
                return true;
 
        if (pthread_mutex_init(&eom_lock, NULL)) {
@@ -185,7 +184,23 @@ _eom_mutex_init(void)
                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;
 }
@@ -538,7 +553,7 @@ eom_init(void)
 API void
 eom_deinit(void)
 {
-       GList *l;
+       GList *l = NULL;
 
        _eom_mutex_lock();
 #ifdef HAVE_WAYLAND
@@ -546,6 +561,13 @@ eom_deinit(void)
 #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. */
@@ -556,9 +578,12 @@ eom_deinit(void)
 
                _eom_free_output_info(&output_info);
        }
+       output_info_list = NULL;
 
        _eom_mutex_unlock();
 
+       _eom_mutex_destory();
+
        INFO("eom deinit");
 }
 
index c1971b4..f1b56d4 100644 (file)
@@ -698,7 +698,7 @@ _eom_wayland_client_initialize()
        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);
 
@@ -745,6 +745,14 @@ _eom_wayland_client_initialize()
 
        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;
 }
 
@@ -764,6 +772,11 @@ _eom_wayland_client_deinitialize()
                        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.");