Update the issue of json_tokener_parse_ex's concurrency 04/100604/4
authorYoungHun Kim <yh8004.kim@samsung.com>
Mon, 28 Nov 2016 13:28:26 +0000 (22:28 +0900)
committerYoungHun Kim <yh8004.kim@samsung.com>
Tue, 29 Nov 2016 02:20:11 +0000 (11:20 +0900)
Change-Id: I413c0c42f2c0e48d09e25cf759977ee1e783de5e

include/muse_core_msg_json.h
src/muse_core_msg_json.c

index a33371f..fa30f9f 100644 (file)
@@ -55,7 +55,6 @@ typedef struct muse_core_msg {
        gboolean(*get_value) (const char *, void*, void *, muse_core_type_e);
        void (*jobj_free) (void *);
        void (*free) (void);
-       GMutex msg_lock;
 } muse_core_msg_t;
 
 char *muse_core_msg_json_factory_new(int api, ...);
index 4567dff..e10b9c5 100644 (file)
@@ -26,6 +26,7 @@
 #include "muse_core_internal.h"
 
 static muse_core_msg_t *g_muse_core_msg = NULL;
+static GMutex g_muse_msg_lock;
 
 static void _muse_core_msg_json_set_error(muse_core_msg_parse_err_e *err, int jerr);
 static json_object *_muse_core_msg_json_tokener_parse_len(const char *str, int *len, muse_core_msg_parse_err_e *err);
@@ -73,19 +74,22 @@ static void _muse_core_msg_json_set_error(muse_core_msg_parse_err_e *err, int je
 
 static json_object *_muse_core_msg_json_tokener_parse_len(const char *str, int *len, muse_core_msg_parse_err_e *err)
 {
-       struct json_tokener *tok;
-       struct json_object *obj;
+       struct json_tokener *tok = NULL;
+       struct json_object *obj = NULL;
 
        g_return_val_if_fail(str, NULL);
 
-       if (g_muse_core_msg)
-               g_mutex_lock(&g_muse_core_msg->msg_lock);
+       g_mutex_lock(&g_muse_msg_lock);
 
        tok = json_tokener_new();
 
-       g_return_val_if_fail(tok, NULL);
+       if (!tok) {
+               LOGE("tokener creation error");
+               goto out;
+       }
 
        obj = json_tokener_parse_ex(tok, str, strlen(str));
+
        if (!obj) {
                LOGE("parsing error : %s", str);
                goto out;
@@ -102,10 +106,9 @@ static json_object *_muse_core_msg_json_tokener_parse_len(const char *str, int *
        _muse_core_msg_json_set_error(err, tok->err);
 
 out:
-       json_tokener_free(tok);
-
-       if (g_muse_core_msg)
-               g_mutex_unlock(&g_muse_core_msg->msg_lock);
+       if (tok)
+               json_tokener_free(tok);
+       g_mutex_unlock(&g_muse_msg_lock);
 
        return obj;
 }
@@ -169,9 +172,6 @@ static gboolean _muse_core_msg_json_object_get_value(const char *key, void* jobj
        g_return_val_if_fail(jobj, FALSE);
        g_return_val_if_fail(data, FALSE);
 
-       if (g_muse_core_msg)
-               g_mutex_lock(&g_muse_core_msg->msg_lock);
-
        val = _muse_core_msg_json_find_obj((json_object *)jobj, key);
        if (!val) {
                LOGE("\"%s\" key is not founded", key);
@@ -222,9 +222,6 @@ static gboolean _muse_core_msg_json_object_get_value(const char *key, void* jobj
                break;
        }
 
-       if (g_muse_core_msg)
-               g_mutex_unlock(&g_muse_core_msg->msg_lock);
-
        return TRUE;
 }
 
@@ -238,8 +235,6 @@ static void _muse_core_msg_json_free(void)
 {
        g_return_if_fail(g_muse_core_msg);
 
-       g_mutex_clear(&g_muse_core_msg->msg_lock);
-
        MUSE_FREE(g_muse_core_msg);
 }
 
@@ -255,8 +250,6 @@ static void _muse_core_msg_init_instance(void *(*jobj_new) (char *, int *, muse_
        g_muse_core_msg->get_value = get_value;
        g_muse_core_msg->jobj_free = jobj_free;
        g_muse_core_msg->free = free;
-
-       g_mutex_init(&g_muse_core_msg->msg_lock);
 }
 
 char *muse_core_msg_json_factory_new(int api, ...)