From 6a4e4e6264dfc043e8429426497a54eebb04b2a8 Mon Sep 17 00:00:00 2001 From: Jeongmo Yang Date: Wed, 6 Jan 2016 19:18:41 +0900 Subject: [PATCH] [Release version 0.2.18] Fix bug - 1. fd leak, 2. does not stop foreach callback even though callback returns false Change-Id: I7d1c5900fd17dd450ec848eab13a06a20ad59061 Signed-off-by: Jeongmo Yang --- packaging/capi-media-recorder.spec | 2 +- src/recorder.c | 33 +++++++++++++++++++++++++-------- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/packaging/capi-media-recorder.spec b/packaging/capi-media-recorder.spec index 154327f..84fa018 100644 --- a/packaging/capi-media-recorder.spec +++ b/packaging/capi-media-recorder.spec @@ -1,6 +1,6 @@ Name: capi-media-recorder Summary: A Recorder API -Version: 0.2.17 +Version: 0.2.18 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/recorder.c b/src/recorder.c index d846c3e..6bbb4a2 100644 --- a/src/recorder.c +++ b/src/recorder.c @@ -213,8 +213,11 @@ static void _client_user_callback(recorder_cb_info_s *cb_info, char *recv_msg, m muse_recorder_msg_get(codec, recv_msg); - ((recorder_supported_audio_encoder_cb)cb_info->user_cb[event])((recorder_audio_codec_e)codec, - cb_info->user_data[event]); + if (((recorder_supported_audio_encoder_cb)cb_info->user_cb[event])((recorder_audio_codec_e)codec, cb_info->user_data[event]) == false) { + cb_info->user_cb[event] = NULL; + cb_info->user_data[event] = NULL; + LOGD("stop foreach callback for SUPPORTED_AUDIO_ENCODER"); + } break; } case MUSE_RECORDER_EVENT_TYPE_FOREACH_SUPPORTED_FILE_FORMAT: @@ -223,8 +226,11 @@ static void _client_user_callback(recorder_cb_info_s *cb_info, char *recv_msg, m muse_recorder_msg_get(format, recv_msg); - ((recorder_supported_file_format_cb)cb_info->user_cb[event])((recorder_file_format_e)format, - cb_info->user_data[event]); + if (((recorder_supported_file_format_cb)cb_info->user_cb[event])((recorder_file_format_e)format, cb_info->user_data[event]) == false) { + cb_info->user_cb[event] = NULL; + cb_info->user_data[event] = NULL; + LOGD("stop foreach callback for SUPPORTED_FILE_FORMAT"); + } break; } case MUSE_RECORDER_EVENT_TYPE_FOREACH_SUPPORTED_VIDEO_ENCODER: @@ -233,8 +239,11 @@ static void _client_user_callback(recorder_cb_info_s *cb_info, char *recv_msg, m muse_recorder_msg_get(codec, recv_msg); - ((recorder_supported_video_encoder_cb)cb_info->user_cb[event])((recorder_video_codec_e)codec, - cb_info->user_data[event]); + if (((recorder_supported_video_encoder_cb)cb_info->user_cb[event])((recorder_video_codec_e)codec, cb_info->user_data[event]) == false) { + cb_info->user_cb[event] = NULL; + cb_info->user_data[event] = NULL; + LOGD("stop foreach callback for SUPPORTED_VIDEO_ENCODER"); + } break; } case MUSE_RECORDER_EVENT_TYPE_FOREACH_SUPPORTED_VIDEO_RESOLUTION: @@ -245,8 +254,11 @@ static void _client_user_callback(recorder_cb_info_s *cb_info, char *recv_msg, m muse_recorder_msg_get(width, recv_msg); muse_recorder_msg_get(height, recv_msg); - ((recorder_supported_video_resolution_cb)cb_info->user_cb[event])(width, height, - cb_info->user_data[event]); + if (((recorder_supported_video_resolution_cb)cb_info->user_cb[event])(width, height, cb_info->user_data[event]) == false) { + cb_info->user_cb[event] = NULL; + cb_info->user_data[event] = NULL; + LOGD("stop foreach callback for SUPPORTED_VIDEO_RESOLUTION"); + } break; } @@ -835,6 +847,11 @@ static void _client_callback_destroy(recorder_cb_info_s *cb_info) LOGD("event thread removed"); + if (cb_info->fd > -1) { + muse_core_connection_close(cb_info->fd); + cb_info->fd = -1; + } + if (cb_info->bufmgr) { tbm_bufmgr_deinit(cb_info->bufmgr); cb_info->bufmgr = NULL; -- 2.7.4