added thread for contacts/cleanup init to reduce launch time 77/83677/7
authorJeesun Kim <iamjs.kim@samsung.com>
Fri, 12 Aug 2016 09:36:13 +0000 (18:36 +0900)
committerJongkyu Koo <jk.koo@samsung.com>
Wed, 24 Aug 2016 04:27:41 +0000 (21:27 -0700)
Change-Id: Ic545087d633aab98e86af5eb8f01ad1a418a2a14

server/cal_server.c
server/cal_server_cleanup.c
server/cal_server_contacts.c
server/cal_server_contacts.h

index 2d56ded..54879d7 100644 (file)
@@ -156,21 +156,23 @@ int main(int argc, char *argv[])
        cal_server_update();
 
        _cal_server_init();
-       cal_server_cleanup_start();
        cal_server_alarm_init();
        cal_server_account_init();
-       cal_server_contacts_init();
 
        guint id;
        id = cal_server_dbus_init();
 
+       cal_server_contacts_start();
+       cal_server_cleanup_start();
+
        _cal_server_main();
 
+       cal_server_cleanup_end();
+       cal_server_contacts_end();
+
        cal_time_u_cleanup();
-       cal_server_contacts_deinit();
        cal_server_account_deinit();
        cal_server_alarm_deinit();
-       cal_server_cleanup_end();
 
        _cal_server_deinit();
        cal_server_dbus_deinit(id);
index 90cbbd8..7dc321a 100644 (file)
@@ -109,7 +109,7 @@ static void cal_server_calendar_clean_book(int in_count)
 
 static gpointer _cal_server_calendar_main(gpointer user_data)
 {
-       int ret = CALENDAR_ERROR_NONE;
+       int ret = 0;
        CAL_FN_CALL();
 
        while (1) {
@@ -120,26 +120,26 @@ static gpointer _cal_server_calendar_main(gpointer user_data)
                 */
                cal_server_ondemand_hold();
 
-               ret = cal_connect();
-               if (CALENDAR_ERROR_NONE != ret) {
-                       /* LCOV_EXCL_START */
-                       ERR("cal_connect() Fail(%d)", ret);
-                       cal_server_ondemand_release();
-                       cal_server_ondemand_start();
-                       break;
-                       /* LCOV_EXCL_STOP */
-               }
-
                do {
-                       int deleted_count = 0;
-                       ret = cal_server_calendar_get_count(&deleted_count);
-                       if (CALENDAR_ERROR_NONE != ret)
+                       ret = cal_connect();
+                       if (CALENDAR_ERROR_NONE != ret) {
+                               /* LCOV_EXCL_START */
+                               ERR("cal_connect() Fail(%d)", ret);
                                break;
-                       cal_server_calendar_clean_book(deleted_count);
+                               /* LCOV_EXCL_STOP */
+                       }
+
+                       do {
+                               int deleted_count = 0;
+                               ret = cal_server_calendar_get_count(&deleted_count);
+                               if (CALENDAR_ERROR_NONE != ret)
+                                       break;
+                               cal_server_calendar_clean_book(deleted_count);
+                       } while (0);
+
+                       cal_disconnect();
                } while (0);
 
-               cal_disconnect();
-
                g_mutex_lock(&_cal_server_cleanup_mutex);
                DBG("wait");
                cal_server_ondemand_release();
index 02d0d5f..52b7d39 100644 (file)
 #include "cal_access_control.h"
 #include "cal_server_contacts.h"
 
-#define CAL_SERVER_CONTACTS_SYNC_THREAD_NAME "cal_server_contacts_sync"
+#define CAL_SERVER_CONTACTS_THREAD_NAME "cal_server_contacts"
 #define BULK_MAX_COUNT 100
 #define SYNC_USLEEP 500
 
-GThread *_cal_server_contacts_sync_thread = NULL;
-GCond _cal_server_contacts_sync_cond;
-GMutex _cal_server_contacts_sync_mutex;
+GThread *_cal_server_contacts_thread = NULL;
+GCond _cal_server_contacts_cond;
+GMutex _cal_server_contacts_mutex;
 static bool server_killed = false;
 
 static int _cal_server_contacts_set_new_event(int id, char *label, int calendar_type,
@@ -416,7 +416,7 @@ static void _cal_server_contacts_get_event_list(contacts_list_h contacts_list,
        *out_count = count;
 }
 
-static int _cal_server_contacts_sync(void)
+static int _cal_server_contacts(void)
 {
        CAL_START_TIMESTAMP
 
@@ -640,9 +640,38 @@ void cal_server_contacts_delete(int account_id)
        calendar_query_destroy(query);
 }
 
-static gpointer _cal_server_contacts_sync_main(gpointer user_data)
+static void _changed_cb(const char* view_uri, void *user_data)
+{
+       cal_server_contacts_start();
+}
+
+static int cal_server_contacts_init(void)
+{
+       int ret = 0;
+
+       ret = contacts_connect();
+       if (CONTACTS_ERROR_NONE != ret) {
+               /* LCOV_EXCL_START */
+               ERR("contacts_connect() Fail(%d)", ret);
+               return ret;
+               /* LCOV_EXCL_STOP */
+       }
+
+       ret = contacts_db_add_changed_cb(_contacts_event._uri, _changed_cb, NULL);
+       if (CONTACTS_ERROR_NONE != ret)
+               WARN("contacts_db_add_changed_cb() Fail(%d)", ret);
+
+       ret = contacts_db_add_changed_cb(_contacts_name._uri, _changed_cb, NULL);
+       if (CONTACTS_ERROR_NONE != ret)
+               WARN("contacts_db_add_changed_cb() Fail(%d)", ret);
+
+       return CALENDAR_ERROR_NONE;
+}
+
+static gpointer _cal_server_contacts_main(gpointer user_data)
 {
-       int ret = CALENDAR_ERROR_NONE;
+       int ret = 0;
+       bool is_init_contacts = false;
 
        while (1) {
                /*
@@ -652,33 +681,45 @@ static gpointer _cal_server_contacts_sync_main(gpointer user_data)
                 */
                cal_server_ondemand_hold();
 
-               ret = cal_connect();
-               if (CALENDAR_ERROR_NONE != ret) {
-                       /* LCOV_EXCL_START */
-                       ERR("cal_connect() Fail(%d)", ret);
-                       cal_server_ondemand_release();
-                       cal_server_ondemand_start();
-                       break;
-                       /* LCOV_EXCL_STOP */
-               }
-
-               cal_access_control_set_client_info(NULL, "calendar-service");
+               do {
+                       if (false == is_init_contacts) {
+                               ret = cal_server_contacts_init();
+                               if (CONTACTS_ERROR_NONE != ret) {
+                                       /* LCOV_EXCL_START */
+                                       ERR("cal_server_contacts_init() Fail(%d)", ret);
+                                       break;
+                                       /* LCOV_EXCL_STOP */
+                               }
+                               DBG("init contacts");
+                               is_init_contacts = true;
+                       }
 
-               while (1) {
-                       if (CALENDAR_ERROR_NONE != _cal_server_contacts_sync()) {
-                               DBG("end");
+                       ret = cal_connect();
+                       if (CALENDAR_ERROR_NONE != ret) {
+                               /* LCOV_EXCL_START */
+                               ERR("cal_connect() Fail(%d)", ret);
                                break;
+                               /* LCOV_EXCL_STOP */
                        }
-               }
-               cal_access_control_unset_client_info();
-               cal_disconnect();
 
-               g_mutex_lock(&_cal_server_contacts_sync_mutex);
+                       cal_access_control_set_client_info(NULL, "calendar-service");
+
+                       while (1) {
+                               if (CALENDAR_ERROR_NONE != _cal_server_contacts()) {
+                                       DBG("end");
+                                       break;
+                               }
+                       }
+                       cal_access_control_unset_client_info();
+                       cal_disconnect();
+               } while (0);
+
+               g_mutex_lock(&_cal_server_contacts_mutex);
                DBG("wait");
                cal_server_ondemand_release();
                cal_server_ondemand_start();
-               g_cond_wait(&_cal_server_contacts_sync_cond, &_cal_server_contacts_sync_mutex);
-               g_mutex_unlock(&_cal_server_contacts_sync_mutex);
+               g_cond_wait(&_cal_server_contacts_cond, &_cal_server_contacts_mutex);
+               g_mutex_unlock(&_cal_server_contacts_mutex);
                if (server_killed)
                        break;
        }
@@ -687,68 +728,40 @@ static gpointer _cal_server_contacts_sync_main(gpointer user_data)
        return NULL;
 }
 
-static void cal_server_contacts_sync_start(void)
+void cal_server_contacts_start(void)
 {
        CAL_FN_CALL();
 
        if (server_killed)
                return;
 
-       if (NULL == _cal_server_contacts_sync_thread) {
-               g_mutex_init(&_cal_server_contacts_sync_mutex);
-               g_cond_init(&_cal_server_contacts_sync_cond);
-               _cal_server_contacts_sync_thread = g_thread_new(CAL_SERVER_CONTACTS_SYNC_THREAD_NAME,
-                               _cal_server_contacts_sync_main, NULL);
+       if (NULL == _cal_server_contacts_thread) {
+               g_mutex_init(&_cal_server_contacts_mutex);
+               g_cond_init(&_cal_server_contacts_cond);
+               _cal_server_contacts_thread = g_thread_new(CAL_SERVER_CONTACTS_THREAD_NAME,
+                               _cal_server_contacts_main, NULL);
        }
        /* don't use mutex. */
-       g_cond_signal(&_cal_server_contacts_sync_cond);
+       g_cond_signal(&_cal_server_contacts_cond);
 }
 
-static void _changed_cb(const char* view_uri, void *user_data)
+static void cal_server_contacts_deinit(void)
 {
-       cal_server_contacts_sync_start();
-}
-
-int cal_server_contacts_init(void)
-{
-       int ret = 0;
-
-       ret = contacts_connect();
-       if (CONTACTS_ERROR_NONE != ret) {
-               /* LCOV_EXCL_START */
-               ERR("contacts_connect() Fail(%d)", ret);
-               return ret;
-               /* LCOV_EXCL_STOP */
-       }
-
-       ret = contacts_db_add_changed_cb(_contacts_event._uri, _changed_cb, NULL);
-       if (CONTACTS_ERROR_NONE != ret)
-               WARN("contacts_db_add_changed_cb() Fail(%d)", ret);
-
-       ret = contacts_db_add_changed_cb(_contacts_name._uri, _changed_cb, NULL);
-       if (CONTACTS_ERROR_NONE != ret)
-               WARN("contacts_db_add_changed_cb() Fail(%d)", ret);
-
-       cal_server_contacts_sync_start();
+       contacts_db_remove_changed_cb(_contacts_event._uri, _changed_cb, NULL);
+       contacts_db_remove_changed_cb(_contacts_name._uri, _changed_cb, NULL);
 
-       return CALENDAR_ERROR_NONE;
+       contacts_disconnect();
 }
 
 void cal_server_contacts_end(void)
 {
        server_killed = true;
-       /* don't use mutex. */
-       g_cond_signal(&_cal_server_contacts_sync_cond);
-       g_thread_join(_cal_server_contacts_sync_thread);
-       g_thread_unref(_cal_server_contacts_sync_thread);
-}
-
-void cal_server_contacts_deinit(void)
-{
-       cal_server_contacts_end();
 
-       contacts_db_remove_changed_cb(_contacts_event._uri, _changed_cb, NULL);
-       contacts_db_remove_changed_cb(_contacts_name._uri, _changed_cb, NULL);
+       cal_server_contacts_deinit();
 
-       contacts_disconnect();
+       /* don't use mutex. */
+       g_cond_signal(&_cal_server_contacts_cond);
+       g_thread_join(_cal_server_contacts_thread);
+       g_thread_unref(_cal_server_contacts_thread);
 }
+
index cfe23cb..0e43035 100644 (file)
@@ -21,7 +21,7 @@
 #define __CAL_SERVER_CONTACTS_H__
 
 void cal_server_contacts_delete(int account_id);
-int cal_server_contacts_init(void);
-void cal_server_contacts_deinit(void);
+void cal_server_contacts_start(void);
+void cal_server_contacts_end(void);
 
 #endif /* __CAL_SERVER_CONTACTS_H__ */