#include "ctsvc_mutex.h"
#include "ctsvc_inotify.h"
#include "ctsvc_client_ipc.h"
+#include "ctsvc_client_utils.h"
#include "ctsvc_client_handle.h"
#include "ctsvc_client_service_helper.h"
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)
{
- ctsvc_ipc_recovery();
- ctsvc_ipc_recover_for_change_subscription();
- ctsvc_ipc_set_disconnected(false);
+ CTS_FN_CALL;
+ if (true == ctsvc_ipc_get_disconnected()) {
+ ctsvc_ipc_set_disconnected(false);
+ ctsvc_ipc_recovery();
+ ctsvc_ipc_recover_for_change_subscription();
+ }
}
int ctsvc_client_connect(contacts_h contact)
CTS_FN_CALL;
int ret;
ctsvc_base_s *base = (ctsvc_base_s *)contact;
+ RETV_IF(NULL == base, CONTACTS_ERROR_INVALID_PARAMETER);
ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
if (0 == base->connection_count) {
- char ipc_key[CTSVC_STR_SHORT_LEN] = {0};
- ctsvc_ipc_get_pid_str(ipc_key, sizeof(ipc_key));
-
- ret = ctsvc_ipc_connect(contact, ipc_key);
+ ret = ctsvc_ipc_connect(contact, ctsvc_client_get_pid());
if (ret != CONTACTS_ERROR_NONE) {
CTS_ERR("ctsvc_ipc_connect() Fail(%d)", ret);
ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
}
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);
{
CTS_FN_CALL;
int ret;
+ ctsvc_base_s *base = (ctsvc_base_s *)contact;
+ RETV_IF(NULL == base, CONTACTS_ERROR_INVALID_PARAMETER);
+
ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
- ctsvc_base_s *base = (ctsvc_base_s *)contact;
if (1 == base->connection_count) {
- char ipc_key[CTSVC_STR_SHORT_LEN] = {0};
- ctsvc_ipc_get_pid_str(ipc_key, sizeof(ipc_key));
-
- ret = ctsvc_ipc_disconnect(contact, ipc_key, _ctsvc_connection);
+ ret = ctsvc_ipc_disconnect(contact, ctsvc_client_get_pid(), _ctsvc_connection);
if (ret != CONTACTS_ERROR_NONE) {
ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
CTS_ERR("ctsvc_ipc_disconnect() Fail(%d)", ret);
return ret;
}
ctsvc_inotify_unsubscribe_ipc_ready(contact);
- ctsvc_client_handle_remove((contacts_h)base);
- }
- else {
- base->connection_count--;
}
+ base->connection_count--;
if (1 == _ctsvc_connection) {
ctsvc_ipc_destroy_for_change_subscription();
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);
else {
CTS_DBG("System : please call contacts_connect(), connection count is (%d)", _ctsvc_connection);
ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
- return CONTACTS_ERROR_INVALID_PARAMETER;
+ return CONTACTS_ERROR_DB;
}
_ctsvc_connection--;
+
+ if (0 == base->connection_count) {
+ CTS_INFO("connection_count is 0. remove handle");
+ ret = ctsvc_client_handle_remove(ctsvc_client_get_pid(), contact);
+ WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_client_handle_remove() Fail(%d)", ret);
+ }
ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
return CONTACTS_ERROR_NONE;
{
int ret;
ctsvc_base_s *base = (ctsvc_base_s *)contact;
+ RETV_IF(NULL == base, CONTACTS_ERROR_INVALID_PARAMETER);
ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
if (0 == base->connection_count) {
-
- char ipc_key[CTSVC_STR_SHORT_LEN] = {0};
- ctsvc_ipc_get_tid_str(ipc_key, sizeof(ipc_key));
-
- ret = ctsvc_ipc_connect(contact, ipc_key);
+ ret = ctsvc_ipc_connect(contact, ctsvc_client_get_tid());
if (ret != CONTACTS_ERROR_NONE) {
CTS_ERR("ctsvc_ipc_connect() Fail(%d)", ret);
ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
}
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");
{
int ret;
ctsvc_base_s *base = (ctsvc_base_s *)contact;
+ RETV_IF(NULL == base, CONTACTS_ERROR_INVALID_PARAMETER);
ctsvc_mutex_lock(CTS_MUTEX_CONNECTION);
if (1 == base->connection_count) {
- char ipc_key[CTSVC_STR_SHORT_LEN] = {0};
- ctsvc_ipc_get_tid_str(ipc_key, sizeof(ipc_key));
-
- ret = ctsvc_ipc_disconnect(contact, ipc_key, _ctsvc_connection_on_thread);
+ ret = ctsvc_ipc_disconnect(contact, ctsvc_client_get_tid(), _ctsvc_connection_on_thread);
if (ret != CONTACTS_ERROR_NONE) {
- CTS_ERR("ctsvc_ipc_disconnect_on_thread() Fail(%d)", ret);
+ CTS_ERR("ctsvc_ipc_disconnect() Fail(%d)", ret);
ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
return ret;
}
ctsvc_inotify_unsubscribe_ipc_ready(contact);
- ctsvc_client_handle_remove((contacts_h)base);
- }
- else {
- base->connection_count--;
}
+ base->connection_count--;
if (1 == _ctsvc_connection_on_thread) {
ctsvc_ipc_destroy_for_change_subscription();
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) {
else {
CTS_DBG("System : please call contacts_connect_on_thread(), connection count is (%d)", _ctsvc_connection_on_thread);
ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
- return CONTACTS_ERROR_INVALID_PARAMETER;
+ return CONTACTS_ERROR_DB;
}
_ctsvc_connection_on_thread--;
+ if (0 == base->connection_count) {
+ CTS_INFO("connection_count is 0. remove handle");
+ ret = ctsvc_client_handle_remove(ctsvc_client_get_tid(), contact);
+ WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_client_handle_remove() Fail(%d)", ret);
+ }
ctsvc_mutex_unlock(CTS_MUTEX_CONNECTION);
return CONTACTS_ERROR_NONE;