Add mutex lock for multi thread application 40/98140/2 accepted/tizen/3.0/common/20161117.090609 accepted/tizen/3.0/ivi/20161117.083421 accepted/tizen/3.0/mobile/20161117.083325 accepted/tizen/3.0/tv/20161117.083339 accepted/tizen/3.0/wearable/20161117.083403 submit/tizen_3.0/20161116.081158
authorHyunho Kang <hhstark.kang@samsung.com>
Wed, 16 Nov 2016 08:24:36 +0000 (17:24 +0900)
committerHyunho Kang <hhstark.kang@samsung.com>
Wed, 16 Nov 2016 08:52:46 +0000 (17:52 +0900)
Read sequence could be resembled when multi thread
send message concurrently.

Change-Id: Iaf45e86cb347f017417ec6023db5a2d761dd8099
Signed-off-by: Hyunho Kang <hhstark.kang@samsung.com>
src/message_port.c

index 971e829..459bfe5 100644 (file)
@@ -186,24 +186,39 @@ int message_port_check_trusted_remote_port(const char *remote_app_id, const char
 
 int message_port_send_message(const char *remote_app_id, const char *remote_port, bundle *message)
 {
+       int ret;
        if (remote_app_id == NULL || remote_port == NULL || message == NULL) {
                _LOGE("[MESSAGE_PORT_ERROR_INVALID_PARAMETER] NULL value is not allowed.");
                return MESSAGE_PORT_ERROR_INVALID_PARAMETER;
        }
-       return convert_to_tizen_error((messageport_error_e)messageport_send_message(remote_app_id, remote_port, message));
+
+       _SECURE_LOGI("Send a message to (%s):(%s).", remote_app_id, remote_port);
+       pthread_mutex_lock(&__mutex);
+       ret = messageport_send_message(remote_app_id, remote_port, message);
+       pthread_mutex_unlock(&__mutex);
+
+       return convert_to_tizen_error((messageport_error_e)ret);
 }
 
 int message_port_send_trusted_message(const char *remote_app_id, const char *remote_port, bundle *message)
 {
+       int ret;
        if (remote_app_id == NULL || remote_port == NULL || message == NULL) {
                _LOGE("[MESSAGE_PORT_ERROR_INVALID_PARAMETER] NULL value is not allowed.");
                return MESSAGE_PORT_ERROR_INVALID_PARAMETER;
        }
-       return convert_to_tizen_error((messageport_error_e)messageport_send_trusted_message(remote_app_id, remote_port, message));
+       _SECURE_LOGI("Send a trusted message to (%s):(%s).", remote_app_id, remote_port);
+
+       pthread_mutex_lock(&__mutex);
+       ret = messageport_send_trusted_message(remote_app_id, remote_port, message);
+       pthread_mutex_unlock(&__mutex);
+
+       return convert_to_tizen_error((messageport_error_e)ret);
 }
 
 int message_port_send_message_with_local_port(const char *remote_app_id, const char *remote_port, bundle *message, int local_port_id)
 {
+       int ret;
        if (remote_app_id == NULL || remote_port == NULL || message == NULL) {
                _LOGE("[MESSAGE_PORT_ERROR_INVALID_PARAMETER] NULL value is not allowed.");
                return MESSAGE_PORT_ERROR_INVALID_PARAMETER;
@@ -229,11 +244,16 @@ 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);
-       return convert_to_tizen_error((messageport_error_e)messageport_send_bidirectional_message(local_port_id, remote_app_id, remote_port, message));
+       pthread_mutex_lock(&__mutex);
+       ret = messageport_send_bidirectional_message(local_port_id, remote_app_id, remote_port, message);
+       pthread_mutex_unlock(&__mutex);
+
+       return convert_to_tizen_error((messageport_error_e)ret);
 }
 
 int message_port_send_trusted_message_with_local_port(const char *remote_app_id, const char *remote_port, bundle *message, int local_port_id)
 {
+       int ret;
        if (remote_app_id == NULL || remote_port == NULL || message == NULL) {
                _LOGE("[MESSAGE_PORT_ERROR_INVALID_PARAMETER] NULL value is not allowed.");
                return MESSAGE_PORT_ERROR_INVALID_PARAMETER;
@@ -257,6 +277,10 @@ 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);
-       return convert_to_tizen_error((messageport_error_e)messageport_send_bidirectional_trusted_message(local_port_id, remote_app_id, remote_port, message));
+       pthread_mutex_lock(&__mutex);
+       ret = messageport_send_bidirectional_trusted_message(local_port_id, remote_app_id, remote_port, message);
+       pthread_mutex_unlock(&__mutex);
+
+       return convert_to_tizen_error((messageport_error_e)ret);
 }