From 913095d8de8fa9bd70aab078ead49ca2dbdeff5f Mon Sep 17 00:00:00 2001 From: Gukhwan Cho Date: Thu, 13 Aug 2015 14:54:03 +0900 Subject: [PATCH] ondemand timeout by account/change_language/telephony callback Change-Id: Ic2d3348e060db6f754b8af465423124a7f3dffc7 Signed-off-by: Gukhwan Cho --- server/ctsvc_ipc_server.c | 48 ++++++++++++++++----------------- server/ctsvc_ipc_server2.c | 52 ++++++++++++++++++------------------ server/ctsvc_server.c | 1 - server/ctsvc_server_bg.c | 11 ++++++-- server/ctsvc_server_change_subject.c | 1 + server/ctsvc_server_sim.c | 4 +++ server/ctsvc_server_utils.c | 23 +++++++++++++--- server/ctsvc_server_utils.h | 3 ++- 8 files changed, 86 insertions(+), 57 deletions(-) diff --git a/server/ctsvc_ipc_server.c b/server/ctsvc_ipc_server.c index 3cdfcaa..8fdcad8 100644 --- a/server/ctsvc_ipc_server.c +++ b/server/ctsvc_ipc_server.c @@ -120,7 +120,7 @@ ERROR_RETURN: DATA_FREE: ctsvc_handle_destroy(contact); ctsvc_server_trim_memory(); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); } void ctsvc_ipc_server_check_permission(pims_ipc_h ipc, pims_ipc_data_h indata, @@ -148,7 +148,7 @@ ERROR_RETURN: *outdata = pims_ipc_data_create(0); if (NULL == *outdata) { CTS_ERR("pims_ipc_data_create() Fail"); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -156,7 +156,7 @@ ERROR_RETURN: pims_ipc_data_destroy(*outdata); *outdata = NULL; CTS_ERR("ctsvc_ipc_marshal_int() Fail"); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -165,11 +165,11 @@ ERROR_RETURN: pims_ipc_data_destroy(*outdata); *outdata = NULL; CTS_ERR("ctsvc_ipc_marshal_bool() Fail"); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } } - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); } void ctsvc_ipc_server_db_insert_record(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata) @@ -262,7 +262,7 @@ DATA_FREE: ctsvc_handle_destroy(contact); contacts_record_destroy(record,true); ctsvc_server_trim_memory(); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -337,7 +337,7 @@ DATA_FREE: ctsvc_handle_destroy(contact); contacts_record_destroy(record,true); CONTACTS_FREE(view_uri); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -420,7 +420,7 @@ DATA_FREE: ctsvc_handle_destroy(contact); contacts_record_destroy(record,true); ctsvc_server_trim_memory(); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -510,7 +510,7 @@ DATA_FREE: ctsvc_handle_destroy(contact); CONTACTS_FREE(view_uri); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -606,7 +606,7 @@ ERROR_RETURN: DATA_FREE: ctsvc_handle_destroy(contact); contacts_record_destroy(record, true); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -708,7 +708,7 @@ DATA_FREE: ctsvc_handle_destroy(contact); contacts_list_destroy(list,true); CONTACTS_FREE(view_uri); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -807,7 +807,7 @@ DATA_FREE: ctsvc_handle_destroy(contact); contacts_list_destroy(list,true); contacts_query_destroy(query); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -894,7 +894,7 @@ ERROR_RETURN: DATA_FREE: ctsvc_handle_destroy(contact); CONTACTS_FREE(view_uri); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -980,7 +980,7 @@ ERROR_RETURN: DATA_FREE: ctsvc_handle_destroy(contact); contacts_query_destroy(query); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -1102,7 +1102,7 @@ DATA_FREE: ctsvc_handle_destroy(contact); contacts_list_destroy(list,true); CONTACTS_FREE(ids); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -1200,7 +1200,7 @@ ERROR_RETURN: DATA_FREE: ctsvc_handle_destroy(contact); contacts_list_destroy(list,true); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -1306,7 +1306,7 @@ DATA_FREE: ctsvc_handle_destroy(contact); CONTACTS_FREE(uri); CONTACTS_FREE(ids); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -1427,7 +1427,7 @@ DATA_FREE: ctsvc_handle_destroy(contact); contacts_list_destroy(list,true); CONTACTS_FREE(ids); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -1537,7 +1537,7 @@ DATA_FREE: ctsvc_handle_destroy(contact); contacts_list_destroy(record_list,true); CONTACTS_FREE(view_uri); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -1594,7 +1594,7 @@ ERROR_RETURN: DATA_FREE: ctsvc_handle_destroy(contact); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -1699,7 +1699,7 @@ DATA_FREE: contacts_list_destroy(list,true); CONTACTS_FREE(view_uri); CONTACTS_FREE(keyword); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -1811,7 +1811,7 @@ DATA_FREE: contacts_list_destroy(list,true); free(view_uri); free(keyword); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -1918,7 +1918,7 @@ DATA_FREE: contacts_list_destroy(list,true); contacts_query_destroy(query); CONTACTS_FREE(keyword); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -1966,7 +1966,7 @@ ERROR_RETURN: } DATA_FREE: ctsvc_handle_destroy(contact); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } diff --git a/server/ctsvc_ipc_server2.c b/server/ctsvc_ipc_server2.c index a424bac..37ad984 100644 --- a/server/ctsvc_ipc_server2.c +++ b/server/ctsvc_ipc_server2.c @@ -103,7 +103,7 @@ ERROR_RETURN: } DATA_FREE: ctsvc_handle_destroy(contact); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -166,7 +166,7 @@ ERROR_RETURN: } DATA_FREE: ctsvc_handle_destroy(contact); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -236,7 +236,7 @@ ERROR_RETURN: } DATA_FREE: ctsvc_handle_destroy(contact); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -307,7 +307,7 @@ ERROR_RETURN: } DATA_FREE: ctsvc_handle_destroy(contact); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -382,7 +382,7 @@ ERROR_RETURN: } DATA_FREE: ctsvc_handle_destroy(contact); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -451,7 +451,7 @@ ERROR_RETURN: } DATA_FREE: ctsvc_handle_destroy(contact); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } void ctsvc_ipc_person_unlink_contact(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata) @@ -527,7 +527,7 @@ ERROR_RETURN: } DATA_FREE: ctsvc_handle_destroy(contact); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } void ctsvc_ipc_person_reset_usage(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata) @@ -597,7 +597,7 @@ ERROR_RETURN: } DATA_FREE: ctsvc_handle_destroy(contact); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } void ctsvc_ipc_person_set_favorite_order(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata) @@ -671,7 +671,7 @@ ERROR_RETURN: } DATA_FREE: ctsvc_handle_destroy(contact); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -741,7 +741,7 @@ ERROR_RETURN: } DATA_FREE: ctsvc_handle_destroy(contact); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -808,7 +808,7 @@ ERROR_RETURN: } DATA_FREE: ctsvc_handle_destroy(contact); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -861,7 +861,7 @@ ERROR_RETURN: } DATA_FREE: ctsvc_handle_destroy(contact); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -943,7 +943,7 @@ DATA_FREE: ctsvc_handle_destroy(contact); free(number); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } #endif /* ENABLE_LOG_FEATURE */ @@ -966,21 +966,21 @@ ERROR_RETURN: *outdata = pims_ipc_data_create(0); if (NULL == *outdata) { CTS_ERR("pims_ipc_data_create() Fail"); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) { pims_ipc_data_destroy(*outdata); *outdata = NULL; CTS_ERR("ctsvc_ipc_marshal_int() Fail (return value)"); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(order, *outdata)) { pims_ipc_data_destroy(*outdata); *outdata = NULL; CTS_ERR("ctsvc_ipc_marshal_int() Fail (id)"); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } } @@ -988,7 +988,7 @@ ERROR_RETURN: CTS_ERR("outdata is NULL"); } - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -1010,14 +1010,14 @@ ERROR_RETURN: *outdata = pims_ipc_data_create(0); if (NULL == *outdata) { CTS_ERR("pims_ipc_data_create() Fail"); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) { pims_ipc_data_destroy(*outdata); *outdata = NULL; CTS_ERR("ctsvc_ipc_marshal_int() Fail (return value)"); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(order, *outdata)) { @@ -1031,7 +1031,7 @@ ERROR_RETURN: CTS_ERR("outdata is NULL"); } - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -1065,14 +1065,14 @@ ERROR_RETURN: *outdata = pims_ipc_data_create(0); if (NULL == *outdata) { CTS_ERR("pims_ipc_data_create() Fail"); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) { pims_ipc_data_destroy(*outdata); *outdata = NULL; CTS_ERR("ctsvc_ipc_marshal_int() Fail"); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } } @@ -1080,7 +1080,7 @@ ERROR_RETURN: CTS_ERR("outdata is NULL"); } - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } @@ -1114,14 +1114,14 @@ ERROR_RETURN: *outdata = pims_ipc_data_create(0); if (NULL == *outdata) { CTS_ERR("pims_ipc_data_create() Fail"); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) { pims_ipc_data_destroy(*outdata); *outdata = NULL; CTS_ERR("ctsvc_ipc_marshal_int() Fail"); - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } } @@ -1129,7 +1129,7 @@ ERROR_RETURN: CTS_ERR("outdata is NULL"); } - ctsvc_server_timeout(); + ctsvc_server_start_timeout(); return; } diff --git a/server/ctsvc_server.c b/server/ctsvc_server.c index b371951..6dc8d6b 100644 --- a/server/ctsvc_server.c +++ b/server/ctsvc_server.c @@ -47,7 +47,6 @@ #define CTSVC_TIMEOUT_FOR_DEFAULT 0 -static int ctsvc_list_count = 0; static int ctsvc_timeout_sec = CTSVC_TIMEOUT_FOR_DEFAULT; static GMainLoop *main_loop = NULL; diff --git a/server/ctsvc_server_bg.c b/server/ctsvc_server_bg.c index 1b693e9..f84aba1 100644 --- a/server/ctsvc_server_bg.c +++ b/server/ctsvc_server_bg.c @@ -408,10 +408,10 @@ static gpointer __ctsvc_server_bg_delete(gpointer user_data) } ctsvc_set_client_access_info(NULL, NULL); + ctsvc_server_stop_timeout(); while (1) { if (__ctsvc_cpu_is_busy()) { /* sleep 1 sec in function */ CTS_ERR("Now CPU is busy.. waiting"); - ctsvc_server_timeout(); sleep(CTSVC_SERVER_BG_DELETE_STEP_TIME*59); /* sleep 60 sec(1 min) totally */ continue; } @@ -425,8 +425,10 @@ static gpointer __ctsvc_server_bg_delete(gpointer user_data) ctsvc_unset_client_access_info(); ret = ctsvc_disconnect(); + if (CONTACTS_ERROR_NONE != ret) CTS_ERR("contacts_disconnect Fail(%d)", ret); + ctsvc_server_start_timeout(); g_mutex_lock(&__ctsvc_server_bg_delete_mutex); CTS_DBG("wait"); @@ -434,6 +436,7 @@ static gpointer __ctsvc_server_bg_delete(gpointer user_data) g_mutex_unlock(&__ctsvc_server_bg_delete_mutex); } + ctsvc_server_start_timeout(); return NULL; } @@ -469,8 +472,12 @@ static bool __ctsvc_server_account_delete_cb(const char* event_type, int account { CTS_FN_CALL; CTS_INFO("event_type : %s, account_id : %d", event_type, account_id); - if (STRING_EQUAL == strcmp(event_type, ACCOUNT_NOTI_NAME_DELETE)) + + if (STRING_EQUAL == strcmp(event_type, ACCOUNT_NOTI_NAME_DELETE)) { + ctsvc_server_stop_timeout(); ctsvc_addressbook_delete(account_id); + } + ctsvc_server_start_timeout(); return true; } diff --git a/server/ctsvc_server_change_subject.c b/server/ctsvc_server_change_subject.c index a865d7c..750e63e 100644 --- a/server/ctsvc_server_change_subject.c +++ b/server/ctsvc_server_change_subject.c @@ -24,6 +24,7 @@ #include "contacts.h" #include "ctsvc_internal.h" #include "ctsvc_ipc_define.h" +#include "ctsvc_ipc_marshal.h" #include "ctsvc_server_change_subject.h" #define CTSVC_SUBSCRIBE_MAX_LEN 1024 diff --git a/server/ctsvc_server_sim.c b/server/ctsvc_server_sim.c index 6015dd6..050a39f 100644 --- a/server/ctsvc_server_sim.c +++ b/server/ctsvc_server_sim.c @@ -955,7 +955,9 @@ static void __ctsvc_server_sim_ready_cb(keynode_t *key, void *data) __ctsvc_sim_cb = false; vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SIM_STATUS, __ctsvc_server_sim_ready_cb); + ctsvc_server_stop_timeout(); __ctsvc_server_sim_info_init(); + ctsvc_server_start_timeout(); } static void __ctsvc_server_telephony_ready_cb(keynode_t *key, void *data) @@ -981,7 +983,9 @@ static void __ctsvc_server_telephony_ready_cb(keynode_t *key, void *data) return; } + ctsvc_server_stop_timeout(); __ctsvc_server_sim_info_init(); + ctsvc_server_start_timeout(); } diff --git a/server/ctsvc_server_utils.c b/server/ctsvc_server_utils.c index 4b6e4c0..078fb06 100644 --- a/server/ctsvc_server_utils.c +++ b/server/ctsvc_server_utils.c @@ -76,6 +76,9 @@ static void __ctsvc_server_change_language_cb(keynode_t *key, void *data) } langset = ctsvc_get_langset(); INFO("%s --> %s", langset, new_langset); + + ctsvc_server_stop_timeout(); + if (STRING_EQUAL != strcmp(langset, new_langset)) { bool sort_name_update = false; old_primary_sort = ctsvc_get_primary_sort(); @@ -116,6 +119,8 @@ static void __ctsvc_server_change_language_cb(keynode_t *key, void *data) ctsvc_server_update_collation(); } } + + ctsvc_server_start_timeout(); } void ctsvc_server_final_configuration(void) @@ -172,16 +177,28 @@ static gboolean _timeout_cb(gpointer user_data) return TRUE; } -void ctsvc_server_timeout(void) +void ctsvc_server_start_timeout(void) { - CTS_FN_CALL; int timeout = ctsvc_server_get_timeout_sec(); if (timeout < 1) return; ctsvc_mutex_lock(CTS_MUTEX_TIMEOUT); - if (_ctsvc_timeout > 0) + if (_ctsvc_timeout) g_source_remove(_ctsvc_timeout); _ctsvc_timeout = g_timeout_add_seconds(timeout, _timeout_cb, NULL); ctsvc_mutex_unlock(CTS_MUTEX_TIMEOUT); } + +void ctsvc_server_stop_timeout(void) +{ + int timeout = ctsvc_server_get_timeout_sec(); + if (timeout < 1) + return; + + ctsvc_mutex_lock(CTS_MUTEX_TIMEOUT); + if (_ctsvc_timeout) + g_source_remove(_ctsvc_timeout); + _ctsvc_timeout = 0; + ctsvc_mutex_unlock(CTS_MUTEX_TIMEOUT); +} diff --git a/server/ctsvc_server_utils.h b/server/ctsvc_server_utils.h index c971e33..f71cd25 100644 --- a/server/ctsvc_server_utils.h +++ b/server/ctsvc_server_utils.h @@ -28,7 +28,8 @@ void ctsvc_server_final_configuration(void); int ctsvc_server_set_default_sort(int lang); void ctsvc_server_trim_memory(void); -void ctsvc_server_timeout(void); +void ctsvc_server_start_timeout(void); +void ctsvc_server_stop_timeout(void); #endif /* __CTSVC_SERVER_UTILS_H__ */ -- 2.7.4