modify cleanup thread for normal termination 67/90267/1 accepted/tizen/3.0/ivi/20161011.053619 accepted/tizen/3.0/mobile/20161015.032434 accepted/tizen/common/20160929.163618 accepted/tizen/ivi/20160930.035804 accepted/tizen/mobile/20160930.035754 submit/tizen/20160929.092345 submit/tizen_3.0_ivi/20161010.000000 submit/tizen_3.0_ivi/20161010.000010 submit/tizen_3.0_mobile/20161015.000000
authorJeesun Kim <iamjs.kim@samsung.com>
Thu, 29 Sep 2016 08:03:37 +0000 (17:03 +0900)
committerJeesun Kim <iamjs.kim@samsung.com>
Thu, 29 Sep 2016 08:04:03 +0000 (17:04 +0900)
Change-Id: I39823d4589b4e6884417a984ab6906c7692ebb1e

packaging/calendar-service.spec
server/cal_server.c
server/cal_server_alarm.c
server/cal_server_cleanup.c
server/cal_server_contacts.c

index bee5a82..237742e 100644 (file)
@@ -1,6 +1,6 @@
 Name:       calendar-service
 Summary:    DB library for calendar
-Version:    0.1.170
+Version:    0.1.171
 Release:    1
 Group:      System/Libraries
 License:    Apache-2.0
index 6530201..aabfab4 100644 (file)
@@ -166,6 +166,7 @@ int main(int argc, char *argv[])
        cal_server_cleanup_start();
 
        _cal_server_main();
+       INFO("---------------------[SERVER END]------------------------");
 
        cal_server_cleanup_end();
        cal_server_contacts_end();
index b7c5f28..dfb90f7 100644 (file)
@@ -1181,6 +1181,8 @@ static int cal_server_alarm_init(void)
 
 static gpointer _cal_server_alarm_main(gpointer user_data)
 {
+       DBG("thread alarm: start");
+
        int ret = 0;
        bool is_initialized = false;
 
@@ -1202,7 +1204,7 @@ static gpointer _cal_server_alarm_main(gpointer user_data)
                                        break;
                                        /* LCOV_EXCL_STOP */
                                }
-                               DBG("init alarm");
+                               DBG("thread alarm: init");
                                is_initialized = true;
                        }
 
@@ -1222,6 +1224,7 @@ static gpointer _cal_server_alarm_main(gpointer user_data)
                cal_server_ondemand_release();
                cal_server_ondemand_start();
 
+               DBG("thread alarm: wait");
                while (false == signal_called)
                        g_cond_wait(&_cal_server_alarm_cond, &_cal_server_alarm_mutex);
                signal_called = false;
@@ -1230,7 +1233,7 @@ static gpointer _cal_server_alarm_main(gpointer user_data)
                if (server_killed)
                        break;
        }
-       DBG("end alarm thread");
+       DBG("thread alarm: end");
        g_thread_exit(NULL);
 
        return NULL;
index 7dc321a..6e519ec 100644 (file)
@@ -38,6 +38,7 @@ GThread *_cal_server_cleanup_thread = NULL;
 GCond _cal_server_cleanup_cond;
 GMutex _cal_server_cleanup_mutex;
 static bool server_killed = false;
+static bool signal_called = false;
 
 static int cal_server_calendar_get_count(int *out_count)
 {
@@ -73,7 +74,7 @@ static int cal_server_calendar_get_count(int *out_count)
        return CALENDAR_ERROR_NONE;
 }
 
-static void cal_server_calendar_clean_book(int in_count)
+static void cal_server_cleanup_book(int in_count)
 {
        int ret = 0;
        char query[CAL_DB_SQL_MIN_LEN] = {0};
@@ -107,12 +108,14 @@ static void cal_server_calendar_clean_book(int in_count)
        }
 }
 
-static gpointer _cal_server_calendar_main(gpointer user_data)
+static gpointer _cal_server_cleanup_main(gpointer user_data)
 {
+       DBG("thread cleanup: start");
+
        int ret = 0;
-       CAL_FN_CALL();
 
        while (1) {
+               g_mutex_lock(&_cal_server_cleanup_mutex);
                /*
                 * While syncing with contacts,
                 * because calendar-service could be stopped by on-demand,
@@ -134,26 +137,38 @@ static gpointer _cal_server_calendar_main(gpointer user_data)
                                ret = cal_server_calendar_get_count(&deleted_count);
                                if (CALENDAR_ERROR_NONE != ret)
                                        break;
-                               cal_server_calendar_clean_book(deleted_count);
+                               cal_server_cleanup_book(deleted_count);
                        } while (0);
 
                        cal_disconnect();
                } while (0);
 
-               g_mutex_lock(&_cal_server_cleanup_mutex);
-               DBG("wait");
                cal_server_ondemand_release();
                cal_server_ondemand_start();
-               g_cond_wait(&_cal_server_cleanup_cond, &_cal_server_cleanup_mutex);
+
+               DBG("thread cleanup: wait");
+               while (false == signal_called)
+                       g_cond_wait(&_cal_server_cleanup_cond, &_cal_server_cleanup_mutex);
+               signal_called = false;
                g_mutex_unlock(&_cal_server_cleanup_mutex);
+
                if (server_killed)
                        break;
        }
+       DBG("thread cleanup: end");
        g_thread_exit(NULL);
 
        return NULL;
 }
 
+void cal_server_cleanup_send_signal(void)
+{
+       g_mutex_lock(&_cal_server_cleanup_mutex);
+       signal_called = true;
+       g_cond_signal(&_cal_server_cleanup_cond);
+       g_mutex_unlock(&_cal_server_cleanup_mutex);
+}
+
 void cal_server_cleanup_start(void)
 {
        CAL_FN_CALL();
@@ -165,17 +180,19 @@ void cal_server_cleanup_start(void)
                g_mutex_init(&_cal_server_cleanup_mutex);
                g_cond_init(&_cal_server_cleanup_cond);
                _cal_server_cleanup_thread = g_thread_new(CAL_SERVER_CLEANUP_THREAD_NAME,
-                               _cal_server_calendar_main, NULL);
+                               _cal_server_cleanup_main, NULL);
        }
-       /* don't use mutex. */
-       g_cond_signal(&_cal_server_cleanup_cond);
+       cal_server_cleanup_send_signal();
 }
 
 void cal_server_cleanup_end(void)
 {
        server_killed = true;
-       /* don't use mutex. */
-       g_cond_signal(&_cal_server_cleanup_cond);
+
+       cal_server_cleanup_send_signal();
+
+       g_cond_clear(&_cal_server_cleanup_cond);
        g_thread_join(_cal_server_cleanup_thread);
        g_thread_unref(_cal_server_cleanup_thread);
+       _cal_server_cleanup_thread = NULL;
 }
index 675ac8d..1928070 100644 (file)
@@ -671,6 +671,8 @@ static int cal_server_contacts_init(void)
 
 static gpointer _cal_server_contacts_main(gpointer user_data)
 {
+       DBG("thread contacts: start");
+
        int ret = 0;
        bool is_init_contacts = false;
 
@@ -692,7 +694,7 @@ static gpointer _cal_server_contacts_main(gpointer user_data)
                                        break;
                                        /* LCOV_EXCL_STOP */
                                }
-                               DBG("init contacts");
+                               DBG("thread contacts: init");
                                is_init_contacts = true;
                        }
 
@@ -720,6 +722,7 @@ static gpointer _cal_server_contacts_main(gpointer user_data)
                cal_server_ondemand_release();
                cal_server_ondemand_start();
 
+               DBG("thread contacts: wait");
                while (false == signal_called)
                        g_cond_wait(&_cal_server_contacts_cond, &_cal_server_contacts_mutex);
                signal_called = false;
@@ -728,7 +731,7 @@ static gpointer _cal_server_contacts_main(gpointer user_data)
                if (server_killed)
                        break;
        }
-       DBG("end contacts thread");
+       DBG("thread contacts: end");
        g_thread_exit(NULL);
 
        return NULL;