From ca573bf216b8cd156af45fef07cdc69bdc8e6fcb Mon Sep 17 00:00:00 2001 From: YoungHun Kim Date: Mon, 28 Nov 2016 22:28:26 +0900 Subject: [PATCH] Update the issue of json_tokener_parse_ex's concurrency Change-Id: I413c0c42f2c0e48d09e25cf759977ee1e783de5e --- include/muse_core_msg_json.h | 1 - src/muse_core_msg_json.c | 31 ++++++++++++------------------- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/include/muse_core_msg_json.h b/include/muse_core_msg_json.h index a33371f..fa30f9f 100644 --- a/include/muse_core_msg_json.h +++ b/include/muse_core_msg_json.h @@ -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, ...); diff --git a/src/muse_core_msg_json.c b/src/muse_core_msg_json.c index 4567dff..e10b9c5 100644 --- a/src/muse_core_msg_json.c +++ b/src/muse_core_msg_json.c @@ -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, ...) -- 2.7.4