Add mutex encapsulation 14/180014/1
authorjusung son <jusung07.son@samsung.com>
Thu, 24 May 2018 06:23:08 +0000 (15:23 +0900)
committerjusung son <jusung07.son@samsung.com>
Thu, 24 May 2018 06:23:08 +0000 (15:23 +0900)
  - The mutex global variable can be interfered by other modules.

Change-Id: I94cc8ae2a4a6a55550d1da66e9536bb2899680d3
Signed-off-by: jusung son <jusung07.son@samsung.com>
include/message_port_internal.h [changed mode: 0644->0755]
src/message-port.c
src/message_port.c
src/message_port_internal.c [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index d97ba29..9f51b03
@@ -25,6 +25,8 @@ extern "C" {
 #endif
 
 int convert_to_tizen_error(messageport_error_e error);
+void message_port_lock_mutex();
+void message_port_unlock_mutex();
 
 #ifdef __cplusplus
 }
index 134587f..86b1263 100755 (executable)
@@ -40,6 +40,7 @@
 
 #include "message-port.h"
 #include "message-port-log.h"
+#include "message_port_internal.h"
 
 #define MAX_PACKAGE_STR_SIZE 512
 #define MESSAGEPORT_BUS_NAME_PREFIX "org.tizen.messageport._"
@@ -165,8 +166,6 @@ typedef struct delay_message {
        bundle_raw *data;
 } delay_message_info_s;
 
-
-extern pthread_mutex_t mutex;
 static void __free_list_delay_message_info(gpointer data);
 
 
@@ -1618,23 +1617,23 @@ static gboolean __process_delayed_message(gint fd, GIOCondition cond, gpointer d
        if (port_info == NULL)
                return G_SOURCE_REMOVE;
 
-       pthread_mutex_lock(&mutex);
+       message_port_lock_mutex();
 
        if (port_info->delayed_message_list == NULL) {
                port_info->delayed_message_size = 0;
                port_info->delay_src_id = 0;
-               pthread_mutex_unlock(&mutex);
+               message_port_unlock_mutex();
                return G_SOURCE_REMOVE;
        } else {
                message = g_list_nth_data(port_info->delayed_message_list, 0);
                ret = __send_delayed_message(port_info->send_sock_fd, message);
 
                if (ret == MESSAGEPORT_ERROR_RESOURCE_UNAVAILABLE) {
-                       pthread_mutex_unlock(&mutex);
+                       message_port_unlock_mutex();
                        return G_SOURCE_CONTINUE;
                } else if (ret == MESSAGEPORT_ERROR_IO_ERROR) {
                        __clear_disconnect_socket(port_info);
-                       pthread_mutex_unlock(&mutex);
+                       message_port_unlock_mutex();
                        return G_SOURCE_REMOVE;
                }
 
@@ -1644,7 +1643,7 @@ static gboolean __process_delayed_message(gint fd, GIOCondition cond, gpointer d
                __free_delay_message_info(message);
        }
 
-       pthread_mutex_unlock(&mutex);
+       message_port_unlock_mutex();
 
        return G_SOURCE_CONTINUE;
 }
index 848c5b4..fcde4eb 100755 (executable)
@@ -17,7 +17,6 @@
 #include <glib.h>
 #include <stdlib.h>
 #include <stdbool.h>
-#include <pthread.h>
 #include <message-port.h>
 #include "message_port_internal.h"
 #include "message_port_log.h"
@@ -30,7 +29,6 @@ typedef struct message_port_callback_item_s {
 
 static GHashTable *__listeners;
 static GHashTable *__trusted_listeners;
-pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void do_callback(message_port_message_cb callback, int local_port_id, const char *remote_app_id, const char *remote_port, bool trusted_remote_port, bundle *message, void *user_data)
 {
@@ -75,13 +73,13 @@ int message_port_register_local_port(const char *local_port, message_port_messag
                if (__listeners == NULL)
                        __listeners = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_free);
 
-               pthread_mutex_lock(&mutex);
+               message_port_lock_mutex();
                message_port_callback_item *item =
                        (message_port_callback_item *)g_hash_table_lookup(__listeners, GINT_TO_POINTER(local_port_id));
                if (item == NULL) {
                        item = (message_port_callback_item *)calloc(1, sizeof(message_port_callback_item));
                        if (item == NULL) {
-                               pthread_mutex_unlock(&mutex);
+                               message_port_unlock_mutex();
                                return MESSAGE_PORT_ERROR_OUT_OF_MEMORY;
                        }
 
@@ -90,7 +88,7 @@ int message_port_register_local_port(const char *local_port, message_port_messag
 
                item->callback = callback;
                item->user_data = user_data;
-               pthread_mutex_unlock(&mutex);
+               message_port_unlock_mutex();
 
        } else {
                _SECURE_LOGI("Register local port fail (%d).", local_port_id);
@@ -113,13 +111,13 @@ int message_port_register_trusted_local_port(const char *local_port, message_por
                if (__trusted_listeners == NULL)
                        __trusted_listeners = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_free);
 
-               pthread_mutex_lock(&mutex);
+               message_port_lock_mutex();
                message_port_callback_item *item =
                        (message_port_callback_item *)g_hash_table_lookup(__trusted_listeners, GINT_TO_POINTER(trusted_local_port_id));
                if (item == NULL) {
                        item = (message_port_callback_item *)calloc(1, sizeof(message_port_callback_item));
                        if (item == NULL) {
-                               pthread_mutex_unlock(&mutex);
+                               message_port_unlock_mutex();
                                return MESSAGE_PORT_ERROR_OUT_OF_MEMORY;
                        }
 
@@ -128,7 +126,7 @@ int message_port_register_trusted_local_port(const char *local_port, message_por
 
                item->callback = callback;
                item->user_data = user_data;
-               pthread_mutex_unlock(&mutex);
+               message_port_unlock_mutex();
        } else {
                _SECURE_LOGI("Register trusted local port fail (%d).", trusted_local_port_id);
        }
@@ -193,9 +191,9 @@ int message_port_send_message(const char *remote_app_id, const char *remote_port
        }
 
        _SECURE_LOGI("Send a message to (%s):(%s).", remote_app_id, remote_port);
-       pthread_mutex_lock(&mutex);
+       message_port_lock_mutex();
        ret = messageport_send_message(remote_app_id, remote_port, message);
-       pthread_mutex_unlock(&mutex);
+       message_port_unlock_mutex();
 
        return convert_to_tizen_error((messageport_error_e)ret);
 }
@@ -209,9 +207,9 @@ int message_port_send_trusted_message(const char *remote_app_id, const char *rem
        }
        _SECURE_LOGI("Send a trusted message to (%s):(%s).", remote_app_id, remote_port);
 
-       pthread_mutex_lock(&mutex);
+       message_port_lock_mutex();
        ret = messageport_send_trusted_message(remote_app_id, remote_port, message);
-       pthread_mutex_unlock(&mutex);
+       message_port_unlock_mutex();
 
        return convert_to_tizen_error((messageport_error_e)ret);
 }
@@ -244,9 +242,9 @@ int message_port_send_message_with_local_port(const char *remote_app_id, const c
        }
 
        _SECURE_LOGI("Send a message to (%s):(%s) and listen at the local port ID (%d).", remote_app_id, remote_port, local_port_id);
-       pthread_mutex_lock(&mutex);
+       message_port_lock_mutex();
        ret = messageport_send_bidirectional_message(local_port_id, remote_app_id, remote_port, message);
-       pthread_mutex_unlock(&mutex);
+       message_port_unlock_mutex();
 
        return convert_to_tizen_error((messageport_error_e)ret);
 }
@@ -277,9 +275,9 @@ int message_port_send_trusted_message_with_local_port(const char *remote_app_id,
        }
 
        _SECURE_LOGI("Send a trusted message to (%s):(%s) and listen at the local port ID (%d).", remote_app_id, remote_port, local_port_id);
-       pthread_mutex_lock(&mutex);
+       message_port_lock_mutex();
        ret = messageport_send_bidirectional_trusted_message(local_port_id, remote_app_id, remote_port, message);
-       pthread_mutex_unlock(&mutex);
+       message_port_unlock_mutex();
 
        return convert_to_tizen_error((messageport_error_e)ret);
 }
old mode 100644 (file)
new mode 100755 (executable)
index 258b41a..a87530e
@@ -15,6 +15,9 @@
  */
 #include "message_port.h"
 #include "message_port_internal.h"
+#include <pthread.h>
+
+static pthread_mutex_t _message_port_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 int convert_to_tizen_error(messageport_error_e error)
 {
@@ -39,3 +42,13 @@ int convert_to_tizen_error(messageport_error_e error)
                return error;
        }
 }
+
+void message_port_lock_mutex()
+{
+       pthread_mutex_lock(&_message_port_mutex);
+}
+
+void message_port_unlock_mutex()
+{
+       pthread_mutex_unlock(&_message_port_mutex);
+}