move 'remove handle' in mutex 87/47587/3
authorJeesun Kim <iamjs.kim@samsung.com>
Fri, 28 Aug 2015 12:15:37 +0000 (21:15 +0900)
committerJeesun Kim <iamjs.kim@samsung.com>
Wed, 9 Sep 2015 01:36:14 +0000 (10:36 +0900)
Change-Id: I8f34867486ef3c09ff46d71789d360068be01a01

client/cal_client_service.c
client/cal_client_service.h
client/cal_client_service_helper.c
client/cal_client_service_helper.h
packaging/calendar-service.spec

index 2efc1e7..bafb155 100644 (file)
 
 #include "calendar.h"
 #include "cal_internal.h"
-#include "cal_client_utils.h"
 #include "cal_client_handle.h"
 #include "cal_client_service_helper.h"
+#include "cal_client_utils.h"
+
+static int cal_connection = 0; /* total connection count: each count from zone */
+static TLS int cal_connection_on_thread = 0;
 
 API int calendar_connect(void)
 {
@@ -38,7 +41,8 @@ API int calendar_connect(void)
                ERR("cal_client_handle_get_p_with_id() Fail(%d)", ret);
                return ret;
        }
-       return cal_client_connect(handle);
+       ret = cal_client_connect(handle, id, &cal_connection);
+       return ret;
 }
 
 API int calendar_disconnect(void)
@@ -55,13 +59,8 @@ API int calendar_disconnect(void)
                ERR("cal_client_handle_get_p_with_id() Fail(%d)", ret);
                return ret;
        }
-       ret = cal_client_disconnect(handle);
-       WARN_IF(CALENDAR_ERROR_NONE != ret, "cal_client_disconnect_on_thread() Fail(%d)", ret);
-
-       if (0 == ((cal_s *)handle)->connection_count) {
-               ret = cal_client_handle_remove(id, handle);
-               WARN_IF(CALENDAR_ERROR_NONE != ret, "cal_client_handle_remove() Fail(%d)", ret);
-       }
+       ret = cal_client_disconnect(handle, id, &cal_connection);
+       WARN_IF(CALENDAR_ERROR_NONE != ret, "cal_client_disconnect() Fail(%d)", ret);
        return ret;
 }
 
@@ -80,7 +79,8 @@ API int calendar_connect_on_thread(void)
                ERR("cal_client_handle_get_p_with_id() Fail(%d)", ret);
                return ret;
        }
-       return cal_client_connect_on_thread(handle);
+       ret = cal_client_connect(handle, id, &cal_connection_on_thread);
+       return ret;
 }
 
 API int calendar_disconnect_on_thread(void)
@@ -97,13 +97,8 @@ API int calendar_disconnect_on_thread(void)
                ERR("cal_client_handle_get_p_with_id() Fail(%d)", ret);
                return ret;
        }
-       ret = cal_client_disconnect_on_thread(handle);
-       WARN_IF(CALENDAR_ERROR_NONE != ret, "cal_client_disconnect_on_thread() Fail(%d)", ret);
-
-       if (0 == ((cal_s *)handle)->connection_count) {
-               ret = cal_client_handle_remove(id, handle);
-               WARN_IF(CALENDAR_ERROR_NONE != ret, "cal_client_handle_remove() Fail(%d)", ret);
-       }
+       ret = cal_client_disconnect(handle, id, &cal_connection_on_thread);
+       WARN_IF(CALENDAR_ERROR_NONE != ret, "cal_client_disconnect() Fail(%d)", ret);
        return ret;
 }
 
@@ -122,6 +117,12 @@ API int calendar_connect_with_flags(unsigned int flags)
                ERR("cal_client_handle_get_p_with_id() Fail(%d)", ret);
                return ret;
        }
-       ret = cal_client_connect_with_flags(handle, flags);
+       ret = cal_client_connect_with_flags(handle, id, &cal_connection, flags);
        return ret;
 }
+
+
+int cal_client_get_thread_connection_count(void)
+{
+       return cal_connection_on_thread;
+}
index e9e3306..b0a1da7 100644 (file)
@@ -25,5 +25,6 @@ int calendar_disconnect(void);
 int calendar_connect_on_thread(void);
 int calendar_disconnect_on_thread(void);
 int calendar_connect_with_flags(unsigned int flags);
+int cal_client_get_thread_connection_count(void);
 
 #endif /* __CAL_CLIENT_SERVICE_H__ */
index 14f97b2..8158a9e 100644 (file)
 #include "cal_client_ipc.h"
 #include "cal_client_utils.h"
 
-static int cal_connection = 0; /* total connection count */
-static TLS int cal_connection_on_thread = 0;
-
-int cal_client_get_thread_connection_count(void)
-{
-       return cal_connection_on_thread;
-}
-
 static void _cal_client_ipc_initialized_cb(void *user_data)
 {
        if (true == cal_client_ipc_get_disconnected()) {
@@ -45,7 +37,7 @@ static void _cal_client_ipc_initialized_cb(void *user_data)
        }
 }
 
-int cal_client_connect(calendar_h handle)
+int cal_client_connect(calendar_h handle, unsigned int id, int *connection_count)
 {
        CAL_FN_CALL();
        int ret = 0;
@@ -55,7 +47,7 @@ int cal_client_connect(calendar_h handle)
        cal_mutex_lock(CAL_MUTEX_CONNECTION);
        cal_s *h = (cal_s *)handle;
        if (0 == h->connection_count) {
-               ret = cal_client_ipc_connect(handle, cal_client_get_pid());
+               ret = cal_client_ipc_connect(handle,id);
                if (CALENDAR_ERROR_NONE != ret) {
                        ERR("cal_client_ipc_connect() Fail(%d)", ret);
                        cal_mutex_unlock(CAL_MUTEX_CONNECTION);
@@ -65,7 +57,7 @@ int cal_client_connect(calendar_h handle)
        h->connection_count++;
        DBG("[Connection count:handle] (%d)", h->connection_count);
 
-       if (0 == cal_connection) { /* total connection */
+       if (0 == *connection_count) { /* total connection */
                g_type_init(); /* for alarmmgr */
                ret = cal_inotify_initialize();
                if (CALENDAR_ERROR_NONE != ret) {
@@ -77,19 +69,19 @@ int cal_client_connect(calendar_h handle)
                cal_view_initialize();
                cal_client_reminder_create_for_subscribe();
        }
-       else if (0 < cal_connection) {
+       else if (0 < *connection_count) {
                DBG("[System] calendar service is already connected");
        }
 
        if (1 == h->connection_count)
                cal_inotify_subscribe_ipc_ready(handle, _cal_client_ipc_initialized_cb, NULL);
 
-       cal_connection++;
+       (*connection_count)++;
        cal_mutex_unlock(CAL_MUTEX_CONNECTION);
        return CALENDAR_ERROR_NONE;
 }
 
-int cal_client_disconnect(calendar_h handle)
+int cal_client_disconnect(calendar_h handle, unsigned int id, int *connection_count)
 {
        CAL_FN_CALL();
        int ret = 0;
@@ -98,8 +90,9 @@ int cal_client_disconnect(calendar_h handle)
 
        cal_mutex_lock(CAL_MUTEX_CONNECTION);
        cal_s *h = (cal_s *)handle;
+
        if (1 == h->connection_count) {
-               ret = cal_client_ipc_disconnect(handle, cal_client_get_pid(), cal_connection);
+               ret = cal_client_ipc_disconnect(handle, id, *connection_count);
                if (CALENDAR_ERROR_NONE != ret) {
                        ERR("cal_client_ipc_disconnect() Fail(%d)", ret);
                        cal_mutex_unlock(CAL_MUTEX_CONNECTION);
@@ -110,14 +103,20 @@ int cal_client_disconnect(calendar_h handle)
        h->connection_count--;
        DBG("[Disonnection count:handle] (%d)", h->connection_count);
 
-       if (1 == cal_connection) {
+       if (0 == h->connection_count) {
+               ret = cal_client_handle_remove(cal_client_get_pid(), handle);
+               if (CALENDAR_ERROR_NONE != ret)
+                       WARN("cal_client_handle_remove() Fail(%d)", ret);
+       }
+
+       if (1 == *connection_count) {
                DBG("[System] disconnected successfully");
                cal_client_reminder_destroy_for_subscribe();
                cal_view_finalize();
                cal_inotify_finalize();
        }
-       else if (1 < cal_connection) {
-               DBG("[System] connection count(%d)", cal_connection);
+       else if (1 < *connection_count) {
+               DBG("[System] connection count(%d)", *connection_count);
        }
        else {
                DBG("[System] calendar_connect() is needed");
@@ -125,12 +124,12 @@ int cal_client_disconnect(calendar_h handle)
                return CALENDAR_ERROR_INVALID_PARAMETER;
        }
 
-       cal_connection--;
+       (*connection_count)--;
        cal_mutex_unlock(CAL_MUTEX_CONNECTION);
        return CALENDAR_ERROR_NONE;
 }
 
-int cal_client_connect_with_flags(calendar_h handle, unsigned int flags)
+int cal_client_connect_with_flags(calendar_h handle, unsigned int id, int *connection_count, unsigned int flags)
 {
        CAL_FN_CALL();
        int ret = 0;
@@ -138,7 +137,7 @@ int cal_client_connect_with_flags(calendar_h handle, unsigned int flags)
        /* If new flag is defined, error check should be updated. */
        RETVM_IF(flags & 0x11111110, CALENDAR_ERROR_INVALID_PARAMETER, "flag is invalid(%x)", flags);
 
-       ret = cal_client_connect(handle);
+       ret = cal_client_connect(handle, id, connection_count);
        if (CALENDAR_ERROR_NONE == ret)
                return ret;
 
@@ -147,7 +146,7 @@ int cal_client_connect_with_flags(calendar_h handle, unsigned int flags)
                int retry_time = 500;
                for (i = 0; i < 9; i++) {
                        usleep(retry_time*1000);
-                       ret = cal_client_connect(handle);
+                       ret = cal_client_connect(handle, id, connection_count);
                        DBG("retry count(%d), ret(%x)", (i+1), ret);
                        if (CALENDAR_ERROR_NONE == ret)
                                break;
@@ -159,87 +158,3 @@ int cal_client_connect_with_flags(calendar_h handle, unsigned int flags)
        }
        return ret;
 }
-
-int cal_client_connect_on_thread(calendar_h handle)
-{
-       CAL_FN_CALL();
-       int ret = 0;
-
-       RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
-
-       cal_mutex_lock(CAL_MUTEX_CONNECTION);
-       cal_s *h = (cal_s *)handle;
-       if (0 == h->connection_count) {
-               ret = cal_client_ipc_connect(handle, cal_client_get_tid());
-               if (CALENDAR_ERROR_NONE != ret) {
-                       ERR("cal_client_ipc_connect() Fail(%d)", ret);
-                       cal_mutex_unlock(CAL_MUTEX_CONNECTION);
-                       return ret;
-               }
-       }
-       h->connection_count++;
-       DBG("[Connection count:handle] (%d)", h->connection_count);
-
-       if (0 == cal_connection_on_thread) {
-               ret = cal_inotify_initialize();
-               if (CALENDAR_ERROR_NONE != ret) {
-                       ERR("cal_inotify_initialize() Fail(%d)", ret);
-                       cal_mutex_unlock(CAL_MUTEX_CONNECTION);
-                       return ret;
-               }
-
-               cal_view_initialize();
-               cal_client_reminder_create_for_subscribe();
-       }
-       else if (0 < cal_connection_on_thread) {
-               DBG("[System] calendar service is already connected");
-       }
-
-       if (1 == h->connection_count)
-               cal_inotify_subscribe_ipc_ready(handle, _cal_client_ipc_initialized_cb, NULL);
-
-       cal_connection_on_thread++;
-       cal_mutex_unlock(CAL_MUTEX_CONNECTION);
-       return CALENDAR_ERROR_NONE;
-}
-
-int cal_client_disconnect_on_thread(calendar_h handle)
-{
-       CAL_FN_CALL();
-       int ret = 0;
-
-       RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
-
-       cal_mutex_lock(CAL_MUTEX_CONNECTION);
-       cal_s *h = (cal_s *)handle;
-       if (1 == h->connection_count) {
-               ret = cal_client_ipc_disconnect(handle, cal_client_get_tid(), cal_connection_on_thread);
-               if (CALENDAR_ERROR_NONE != ret) {
-                       ERR("cal_client_ipc_disconnect() Fail(%d)", ret);
-                       cal_mutex_unlock(CAL_MUTEX_CONNECTION);
-                       return ret;
-               }
-               cal_inotify_unsubscribe_ipc_ready(handle);
-       }
-       h->connection_count--;
-       DBG("[Disonnection count:handle] (%d)", h->connection_count);
-
-       if (1 == cal_connection_on_thread) {
-               DBG("[System] disconnected on thread successfully");
-               cal_client_reminder_destroy_for_subscribe();
-               cal_view_finalize();
-               cal_inotify_finalize();
-       }
-       else if (1 < cal_connection_on_thread) {
-               DBG("[system] connection_on_thread count(%d)", cal_connection_on_thread);
-       }
-       else {
-               DBG("[system] calendar_connect_on_thread() is needed");
-               cal_mutex_unlock(CAL_MUTEX_CONNECTION);
-               return CALENDAR_ERROR_INVALID_PARAMETER;
-       }
-
-       cal_connection_on_thread--;
-       cal_mutex_unlock(CAL_MUTEX_CONNECTION);
-       return CALENDAR_ERROR_NONE;
-}
index dbad2d3..cf3f787 100644 (file)
 #ifndef __CAL_CLIENT_SERVICE_HELPER_H__
 #define __CAL_CLIENT_SERVICE_HELPER_H__
 
-int cal_client_connect(calendar_h handle);
-int cal_client_disconnect(calendar_h handle);
-int cal_client_connect_with_flags(calendar_h handle, unsigned int flags);
-int cal_client_connect_on_thread(calendar_h handle);
-int cal_client_disconnect_on_thread(calendar_h handle);
-int cal_client_get_thread_connection_count(void);
+int cal_client_connect(calendar_h handle, unsigned int id, int *connection_count);
+int cal_client_disconnect(calendar_h handle, unsigned int id, int *connection_count);
+int cal_client_connect_with_flags(calendar_h handle, unsigned int id, int *connection_count, unsigned int flags);
 
 #endif /* __CAL_CLIENT_SERVICE_HELPER_H__ */
index 65ac748..16e9346 100644 (file)
@@ -1,6 +1,6 @@
 Name:       calendar-service
 Summary:    DB library for calendar
-Version:    0.1.145
+Version:    0.1.147
 Release:    1
 Group:      System/Libraries
 License:    Apache-2.0