fix memory leak in server thread 42/77242/4 accepted/tizen/common/20160706.142023 accepted/tizen/ivi/20160706.081844 accepted/tizen/mobile/20160706.081808 submit/tizen/20160706.013325
authorJeesun Kim <iamjs.kim@samsung.com>
Wed, 29 Jun 2016 07:11:36 +0000 (16:11 +0900)
committerJongkyu Koo <jk.koo@samsung.com>
Tue, 5 Jul 2016 10:29:38 +0000 (03:29 -0700)
Change-Id: Ia158a293d7227a595d46a54f0775b7c416a3cfc5

server/cal_server.c
server/cal_server_alarm.c
server/cal_server_calendar_delete.c
server/cal_server_calendar_delete.h
server/cal_server_contacts.c

index affafeb..33dab6d 100644 (file)
@@ -83,6 +83,7 @@ static int _cal_server_init(void)
 
 static void _cal_server_deinit(void)
 {
+       cal_server_calendar_delete_stop();
        cal_access_control_unset_client_info();
        cal_disconnect();
 }
index 4bc8fd3..fdcfbf6 100644 (file)
@@ -926,8 +926,12 @@ void cal_server_alarm_alert(time_t tt_alert)
 {
        GList *l = NULL;
        _cal_server_alarm_get_latest(tt_alert, true, &l);
+       if (NULL == l)
+               return;
+
        _cal_server_alarm_noti_with_callback(l);
        _cal_server_alarm_noti_with_control(l);
+       /* DO NOT FREE LIST, list is freed in callback */
 }
 
 static int _alert_cb(alarm_id_t alarm_id, void *data)
@@ -954,7 +958,6 @@ void _cal_server_alarm_set_timechange(void)
 {
        vconf_notify_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED,
                        _cal_server_alarm_timechange_cb, NULL);
-
        vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_GMT,
                        _cal_server_alarm_timechange_cb, NULL);
        vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT,
@@ -963,6 +966,18 @@ void _cal_server_alarm_set_timechange(void)
                        _cal_server_alarm_timechange_cb, NULL);
 }
 
+void _cal_server_alarm_unset_timechange(void)
+{
+       vconf_ignore_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED,
+                       _cal_server_alarm_timechange_cb);
+       vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_GMT,
+                       _cal_server_alarm_timechange_cb);
+       vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT,
+                       _cal_server_alarm_timechange_cb);
+       vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_ZONE,
+                       _cal_server_alarm_timechange_cb);
+}
+
 static void _changed_cb(const char* view_uri, void* data)
 {
        CAL_FN_CALL();
@@ -976,6 +991,12 @@ static int _cal_server_alarm_set_inotify(calendar_db_changed_cb callback)
        return 0;
 }
 
+static void _cal_server_alarm_unset_inotify(calendar_db_changed_cb callback)
+{
+       cal_inotify_unsubscribe(CAL_NOTI_EVENT_CHANGED, callback, NULL);
+       cal_inotify_unsubscribe(CAL_NOTI_TODO_CHANGED, callback, NULL);
+}
+
 int cal_server_alarm_init(void)
 {
        CAL_FN_CALL();
@@ -1003,5 +1024,8 @@ int cal_server_alarm_init(void)
 void cal_server_alarm_deinit(void)
 {
        alarmmgr_fini();
+       _cal_server_alarm_unset_inotify(_changed_cb);
+       _cal_server_alarm_unset_timechange();
+
 }
 
index 3b9c3b0..6500bec 100644 (file)
@@ -317,7 +317,10 @@ void cal_server_calendar_delete_start(void)
        }
        /* don't use mutex. */
        g_cond_signal(&_cal_server_calendar_delete_cond);
+}
 
-       return ;
-
+void cal_server_calendar_delete_stop(void)
+{
+       if (_cal_server_calendar_delete_thread)
+               g_thread_join(_cal_server_calendar_delete_thread);
 }
index 84028c0..dbac60a 100644 (file)
@@ -20,5 +20,6 @@
 #define __CAL_SERVER_CALENDAR_DELETE_H__
 
 void cal_server_calendar_delete_start(void);
+void cal_server_calendar_delete_stop(void);
 
 #endif /*__CAL_SERVER_CALENDAR_DELETE_H__*/
index d3da53e..a80dfa3 100644 (file)
@@ -653,6 +653,9 @@ int cal_server_contacts_init(void)
 
 void cal_server_contacts_deinit(void)
 {
+       if (_cal_server_contacts_sync_thread)
+               g_thread_join(_cal_server_contacts_sync_thread);
+
        contacts_db_remove_changed_cb(_contacts_event._uri, _changed_cb, NULL);
        contacts_db_remove_changed_cb(_contacts_name._uri, _changed_cb, NULL);