From: sung.goo.kim Date: Wed, 15 Jul 2015 02:43:59 +0000 (+0900) Subject: used list not to override server_disconnected_cb X-Git-Tag: accepted/tizen/mobile/20150908.232306~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a85af319e588ea2abeae138f6bc344c2091ae69d;p=platform%2Fcore%2Fpim%2Fcontacts-service.git used list not to override server_disconnected_cb Change-Id: I1683147c3071e1496279a8542e744d3c6e444467 --- diff --git a/client/ctsvc_client_ipc.c b/client/ctsvc_client_ipc.c index 4642e81..f7ef04e 100644 --- a/client/ctsvc_client_ipc.c +++ b/client/ctsvc_client_ipc.c @@ -47,7 +47,6 @@ struct ctsvc_ipc_s { static GHashTable *_ctsvc_ipc_table = NULL; static bool _ctsvc_ipc_disconnected = false; -static int disconnected_cb_count = 0; static pims_ipc_h _ctsvc_get_ipc_handle() { @@ -258,9 +257,9 @@ int ctsvc_ipc_call(char *module, char *function, pims_ipc_h data_in, pims_ipc_da pims_ipc_h ipc_handle; if (true == ctsvc_ipc_get_disconnected()) { + ctsvc_ipc_set_disconnected(false); ctsvc_ipc_recovery(); ctsvc_ipc_recover_for_change_subscription(); - ctsvc_ipc_set_disconnected(false); } ipc_handle = _ctsvc_get_ipc_handle(); @@ -336,20 +335,14 @@ int ctsvc_ipc_client_check_permission(int permission, bool *result) return ret; } - - -int ctsvc_ipc_set_disconnected_cb(void (*cb)(void *), void *user_data) +int ctsvc_ipc_set_disconnected_cb(pims_ipc_h ipc, void (*cb)(void *), void *user_data) { - if (0 == disconnected_cb_count++) - return pims_ipc_set_server_disconnected_cb(cb, user_data); - return CONTACTS_ERROR_NONE; + return pims_ipc_add_server_disconnected_cb(ipc, cb, user_data); } -int ctsvc_ipc_unset_disconnected_cb() +int ctsvc_ipc_unset_disconnected_cb(pims_ipc_h ipc) { - if (1 == disconnected_cb_count--) - return pims_ipc_unset_server_disconnected_cb(); - return CONTACTS_ERROR_NONE; + return pims_ipc_remove_server_disconnected_cb(ipc); } void ctsvc_ipc_set_disconnected(bool is_disconnected) diff --git a/client/ctsvc_client_ipc.h b/client/ctsvc_client_ipc.h index af0919a..6c6b874 100644 --- a/client/ctsvc_client_ipc.h +++ b/client/ctsvc_client_ipc.h @@ -45,8 +45,8 @@ int ctsvc_client_ipc_get_change_version(contacts_h contact); int ctsvc_ipc_client_check_permission(int permission, bool *result); -int ctsvc_ipc_set_disconnected_cb(void (*cb)(void *), void *user_data); -int ctsvc_ipc_unset_disconnected_cb(); +int ctsvc_ipc_set_disconnected_cb(pims_ipc_h ipc, void (*cb)(void *), void *user_data); +int ctsvc_ipc_unset_disconnected_cb(pims_ipc_h ipc); void ctsvc_ipc_set_disconnected(bool is_disconnected); int ctsvc_ipc_get_disconnected(); void ctsvc_ipc_recovery(); diff --git a/client/ctsvc_client_noti.c b/client/ctsvc_client_noti.c index f87f2f7..47b91d1 100644 --- a/client/ctsvc_client_noti.c +++ b/client/ctsvc_client_noti.c @@ -47,6 +47,11 @@ static int __ipc_pubsub_ref = 0; static pims_ipc_h __ipc = NULL; static GSList *__db_change_subscribe_list = NULL; +static void _ctsvc_ipc_disconnected_cb(void *user_data) +{ + ctsvc_ipc_set_disconnected(true); +} + static void __ctsvc_db_subscriber_callback(pims_ipc_h ipc, pims_ipc_data_h data, void *user_data) { int ret; @@ -101,6 +106,7 @@ int ctsvc_ipc_create_for_change_subscription() ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB); return CONTACTS_ERROR_IPC; } + ctsvc_ipc_set_disconnected_cb(__ipc, _ctsvc_ipc_disconnected_cb, NULL); } __ipc_pubsub_ref++; ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB); @@ -114,12 +120,15 @@ int ctsvc_ipc_recover_for_change_subscription() ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB); return CONTACTS_ERROR_NONE; } + if (__ipc) + ctsvc_ipc_unset_disconnected_cb(__ipc); __ipc = pims_ipc_create_for_subscribe(CTSVC_IPC_SOCKET_PATH_FOR_CHANGE_SUBSCRIPTION); if (!__ipc) { CTS_ERR("pims_ipc_create_for_subscribe error\n"); ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB); return CONTACTS_ERROR_IPC; } + ctsvc_ipc_set_disconnected_cb(__ipc, _ctsvc_ipc_disconnected_cb, NULL); ctsvc_mutex_unlock(CTS_MUTEX_PIMS_IPC_PUBSUB); return CONTACTS_ERROR_NONE; } @@ -130,6 +139,7 @@ int ctsvc_ipc_destroy_for_change_subscription() if (1 == __ipc_pubsub_ref) { pims_ipc_destroy_for_subscribe(__ipc); + ctsvc_ipc_unset_disconnected_cb(__ipc); __ipc = NULL; } else if (1 < __ipc_pubsub_ref) { diff --git a/client/ctsvc_client_service_helper.c b/client/ctsvc_client_service_helper.c index 96b742d..6d4207b 100644 --- a/client/ctsvc_client_service_helper.c +++ b/client/ctsvc_client_service_helper.c @@ -76,18 +76,13 @@ int ctsvc_client_connect_with_flags(contacts_h contact, unsigned int flags) return ret; } -static void _ctsvc_ipc_disconnected_cb(void *user_data) -{ - ctsvc_ipc_set_disconnected(true); -} - static void _ctsvc_ipc_initialized_cb(void *user_data) { CTS_FN_CALL; if (true == ctsvc_ipc_get_disconnected()) { + ctsvc_ipc_set_disconnected(false); ctsvc_ipc_recovery(); ctsvc_ipc_recover_for_change_subscription(); - ctsvc_ipc_set_disconnected(false); } } @@ -125,7 +120,6 @@ int ctsvc_client_connect(contacts_h contact) } ctsvc_view_uri_init(); ctsvc_ipc_create_for_change_subscription(); - ctsvc_ipc_set_disconnected_cb(_ctsvc_ipc_disconnected_cb, NULL); } else CTS_DBG("System : Contacts service has been already connected(%d)", _ctsvc_connection + 1); @@ -162,7 +156,7 @@ int ctsvc_client_disconnect(contacts_h contact) ctsvc_view_uri_deinit(); ctsvc_inotify_close(); ctsvc_socket_final(); - ctsvc_ipc_unset_disconnected_cb(); + } else if (1 < _ctsvc_connection) CTS_DBG("System : connection count is %d", _ctsvc_connection); @@ -212,7 +206,6 @@ int ctsvc_client_connect_on_thread(contacts_h contact) } ctsvc_view_uri_init(); ctsvc_ipc_create_for_change_subscription(); - ctsvc_ipc_set_disconnected_cb(_ctsvc_ipc_disconnected_cb, NULL); } else if (0 < _ctsvc_connection_on_thread) CTS_DBG("System : Contacts service has been already connected"); @@ -250,7 +243,6 @@ int ctsvc_client_disconnect_on_thread(contacts_h contact) ctsvc_view_uri_deinit(); ctsvc_inotify_close(); ctsvc_socket_final(); - ctsvc_ipc_unset_disconnected_cb(); CTS_DBG("System : connection_on_thread was destroyed successfully"); } else if (1 < _ctsvc_connection_on_thread) {