used list not to override server_disconnected_cb 06/47506/2
authorsung.goo.kim <sung.goo.kim@samsung.com>
Wed, 15 Jul 2015 02:43:59 +0000 (11:43 +0900)
committerGukhwan Cho <gh78.cho@samsung.com>
Fri, 4 Sep 2015 04:35:36 +0000 (13:35 +0900)
Change-Id: I1683147c3071e1496279a8542e744d3c6e444467

client/ctsvc_client_ipc.c
client/ctsvc_client_ipc.h
client/ctsvc_client_noti.c
client/ctsvc_client_service_helper.c

index 4642e81..f7ef04e 100644 (file)
@@ -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)
index af0919a..6c6b874 100644 (file)
@@ -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();
index f87f2f7..47b91d1 100644 (file)
@@ -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) {
index 96b742d..6d4207b 100644 (file)
@@ -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) {