From: Jeongmo Yang Date: Tue, 29 Dec 2015 11:38:13 +0000 (+0900) Subject: Release version 0.2.15 X-Git-Tag: accepted/tizen/mobile/20151230.113739^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fe9a6e5081b9b1f1cb0e31762ba7cc638d6c7170;p=platform%2Fcore%2Fapi%2Frecorder.git Release version 0.2.15 1. Fix crash - change initialization for list of GMutex and GCond Change-Id: I58717ed47e86fe85f1d7c5bcdd1be4e9919b5a42 Signed-off-by: Jeongmo Yang --- diff --git a/include/recorder_private.h b/include/recorder_private.h index f1fadfc..98a913e 100644 --- a/include/recorder_private.h +++ b/include/recorder_private.h @@ -45,8 +45,8 @@ typedef struct _recorder_cb_info_s { gpointer user_cb[MUSE_RECORDER_EVENT_TYPE_NUM]; gpointer user_data[MUSE_RECORDER_EVENT_TYPE_NUM]; gchar recv_msg[MUSE_RECORDER_MSG_MAX_LENGTH]; - GCond *api_cond; - GMutex *api_mutex; + GCond api_cond[MUSE_RECORDER_API_MAX]; + GMutex api_mutex[MUSE_RECORDER_API_MAX]; gint *api_activating; gint *api_ret; tbm_bufmgr bufmgr; diff --git a/packaging/capi-media-recorder.spec b/packaging/capi-media-recorder.spec index 4ff1c9f..ae6c1eb 100644 --- a/packaging/capi-media-recorder.spec +++ b/packaging/capi-media-recorder.spec @@ -1,7 +1,7 @@ Name: capi-media-recorder Summary: A Recorder API -Version: 0.2.14 -Release: 2 +Version: 0.2.15 +Release: 0 Group: Multimedia/API License: Apache-2.0 Source0: %{name}-%{version}.tar.gz diff --git a/src/recorder.c b/src/recorder.c index 52a9c53..562a98d 100644 --- a/src/recorder.c +++ b/src/recorder.c @@ -406,20 +406,15 @@ static void *_recorder_msg_handler_func(gpointer data) } rec_msg = (recorder_message_s *)g_queue_pop_head(cb_info->msg_queue); - g_mutex_unlock(&cb_info->msg_handler_mutex); - if (rec_msg == NULL) { LOGE("NULL message"); g_mutex_lock(&cb_info->msg_handler_mutex); continue; } - api = rec_msg->api; - if (api < MUSE_RECORDER_API_MAX) { g_mutex_lock(&cb_info->api_mutex[api]); - if (muse_recorder_msg_get(ret, rec_msg->recv_msg)) { cb_info->api_ret[api] = ret; cb_info->api_activating[api] = 1; @@ -658,10 +653,9 @@ CB_HANDLER_EXIT: static recorder_cb_info_s *_client_callback_new(gint sockfd) { recorder_cb_info_s *cb_info = NULL; - GCond *tmp_cond = NULL; - GMutex *tmp_mutex = NULL; gint *tmp_activating = NULL; gint *tmp_ret = NULL; + gint i = 0; g_return_val_if_fail(sockfd > 0, NULL); @@ -676,16 +670,9 @@ static recorder_cb_info_s *_client_callback_new(gint sockfd) g_mutex_init(&cb_info->idle_event_mutex); g_cond_init(&cb_info->idle_event_cond); - tmp_cond = g_new0(GCond, MUSE_RECORDER_API_MAX); - if (tmp_cond == NULL) { - LOGE("tmp_cond failed"); - goto ErrorExit; - } - - tmp_mutex = g_new0(GMutex, MUSE_RECORDER_API_MAX); - if (tmp_mutex == NULL) { - LOGE("tmp_mutex failed"); - goto ErrorExit; + for (i = 0 ; i < MUSE_RECORDER_API_MAX ; i++) { + g_mutex_init(&cb_info->api_mutex[i]); + g_cond_init(&cb_info->api_cond[i]); } tmp_activating = g_new0(gint, MUSE_RECORDER_API_MAX); @@ -717,8 +704,6 @@ static recorder_cb_info_s *_client_callback_new(gint sockfd) } cb_info->fd = sockfd; - cb_info->api_cond = tmp_cond; - cb_info->api_mutex = tmp_mutex; cb_info->api_activating = tmp_activating; cb_info->api_ret = tmp_ret; @@ -748,6 +733,11 @@ ErrorExit: cb_info->msg_handler_thread = NULL; } + for (i = 0 ; i < MUSE_RECORDER_API_MAX ; i++) { + g_mutex_clear(&cb_info->api_mutex[i]); + g_cond_clear(&cb_info->api_cond[i]); + } + g_mutex_clear(&cb_info->msg_handler_mutex); g_cond_clear(&cb_info->msg_handler_cond); g_mutex_clear(&cb_info->idle_event_mutex); @@ -762,14 +752,6 @@ ErrorExit: cb_info = NULL; } - if (tmp_cond) { - g_free(tmp_cond); - tmp_cond = NULL; - } - if (tmp_mutex) { - g_free(tmp_mutex); - tmp_mutex = NULL; - } if (tmp_activating) { g_free(tmp_activating); tmp_activating = NULL; @@ -817,6 +799,8 @@ static int client_wait_for_cb_return(muse_recorder_api_e api, recorder_cb_info_s static void _client_callback_destroy(recorder_cb_info_s *cb_info) { + gint i = 0; + g_return_if_fail(cb_info != NULL); LOGD("MSG receive thread[%p] destroy", cb_info->msg_recv_thread); @@ -843,20 +827,17 @@ static void _client_callback_destroy(recorder_cb_info_s *cb_info) g_mutex_clear(&cb_info->idle_event_mutex); g_cond_clear(&cb_info->idle_event_cond); + for (i = 0 ; i < MUSE_RECORDER_API_MAX ; i++) { + g_mutex_clear(&cb_info->api_mutex[i]); + g_cond_clear(&cb_info->api_cond[i]); + } + LOGD("event thread removed"); if (cb_info->bufmgr) { tbm_bufmgr_deinit(cb_info->bufmgr); cb_info->bufmgr = NULL; } - if (cb_info->api_cond) { - g_free(cb_info->api_cond); - cb_info->api_cond = NULL; - } - if (cb_info->api_mutex) { - g_free(cb_info->api_mutex); - cb_info->api_mutex = NULL; - } if (cb_info->api_activating) { g_free(cb_info->api_activating); cb_info->api_activating = NULL;