From: Jeongmo Yang Date: Thu, 14 Nov 2024 01:57:17 +0000 (+0900) Subject: Bug fix for idle event handling X-Git-Tag: accepted/tizen/unified/20241118.012236^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F55%2F320355%2F4;p=platform%2Fcore%2Fapi%2Frecorder.git Bug fix for idle event handling - The idle event could be remained although handle is destroyed. To fix the issue, add new flag to check whether idle callback is deactivated. [Version] 1.0.2 [Issue Type] Bug fix Change-Id: Ib533b858b3f9d36ba9d22d7ee09ca4bf51bc8b8e Signed-off-by: Jeongmo Yang --- diff --git a/include/recorder_private.h b/include/recorder_private.h index 365c19e..9a3bc9a 100644 --- a/include/recorder_private.h +++ b/include/recorder_private.h @@ -148,6 +148,7 @@ typedef struct _recorder_cb_info_s { /* idle event */ GList *idle_event_list; gboolean is_in_idle_cb; + gboolean is_idle_cb_deactivated; /* user callback */ gpointer user_cb[MUSE_RECORDER_EVENT_TYPE_NUM]; diff --git a/packaging/capi-media-recorder.spec b/packaging/capi-media-recorder.spec index b5f743c..b22313b 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: 1.0.1 +Version: 1.0.2 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/recorder.c b/src/recorder.c index 967bdb8..c5fe885 100644 --- a/src/recorder.c +++ b/src/recorder.c @@ -626,8 +626,10 @@ static void _recorder_deactivate_idle_event_all(recorder_cb_info_s *cb_info) return; } + cb_info->is_idle_cb_deactivated = TRUE; + if (cb_info->idle_event_list == NULL) { - REC_LOG_INFO("No remained idle event"); + REC_LOG_WARNING("cb_info[%p] No remained idle event", cb_info); return; } @@ -642,8 +644,8 @@ static void _recorder_deactivate_idle_event_all(recorder_cb_info_s *cb_info) continue; } - REC_LOG_WARNING("set NULL cb_info for event[%d] %p, it will be freed on idle callback", - rec_idle_event->event, rec_idle_event); + REC_LOG_WARNING("set NULL cb_info[%p] for event[%d][%p] which will be freed in idle cb", + cb_info, rec_idle_event->event, rec_idle_event); rec_idle_event->cb_info = NULL; @@ -1013,27 +1015,31 @@ static void *_recorder_msg_handler_func(gpointer data) _recorder_client_user_callback(cb_info, rec_msg->recv_msg, rec_msg->event, rec_msg->tfd); break; case MUSE_RECORDER_EVENT_CLASS_THREAD_MAIN: - rec_idle_event = g_new0(recorder_idle_event_s, 1); - if (rec_idle_event == NULL) { - REC_LOG_ERROR("event alloc failed"); - break; - } + g_mutex_lock(&g_rec_idle_event_lock); - rec_idle_event->event = rec_msg->event; - rec_idle_event->cb_info = cb_info; + if (cb_info->is_idle_cb_deactivated) { + REC_LOG_WARNING("cb_info[%p] idle callback deactivated, skip event[%d]", + cb_info, rec_msg->event); + } else { + rec_idle_event = g_new0(recorder_idle_event_s, 1); - strncpy(rec_idle_event->recv_msg, rec_msg->recv_msg, sizeof(rec_idle_event->recv_msg)); + rec_idle_event->event = rec_msg->event; + rec_idle_event->cb_info = cb_info; - REC_LOG_DEBUG("add recorder event[%d][%p] to IDLE", rec_msg->event, rec_idle_event); + strncpy(rec_idle_event->recv_msg, rec_msg->recv_msg, sizeof(rec_idle_event->recv_msg)); - g_mutex_lock(&g_rec_idle_event_lock); - cb_info->idle_event_list = g_list_append(cb_info->idle_event_list, (gpointer)rec_idle_event); - g_mutex_unlock(&g_rec_idle_event_lock); + REC_LOG_DEBUG("cb_info[%p] add idle event[%d][%p]", + cb_info, rec_idle_event->event, rec_idle_event); - g_idle_add_full(G_PRIORITY_DEFAULT, - (GSourceFunc)_recorder_idle_event_callback, - (gpointer)rec_idle_event, - NULL); + cb_info->idle_event_list = g_list_append(cb_info->idle_event_list, (gpointer)rec_idle_event); + + g_idle_add_full(G_PRIORITY_DEFAULT, + (GSourceFunc)_recorder_idle_event_callback, + (gpointer)rec_idle_event, + NULL); + } + + g_mutex_unlock(&g_rec_idle_event_lock); break; default: REC_LOG_ERROR("unknown event class[%d]", rec_msg->event_class); @@ -1282,6 +1288,8 @@ static recorder_cb_info_s *_recorder_client_callback_new(gint sockfd) goto ErrorExit; } + REC_LOG_WARNING("new cb_info[%p]", cb_info); + cb_info->is_server_connected = TRUE; return cb_info; @@ -1542,6 +1550,8 @@ static void _recorder_client_callback_destroy(recorder_cb_info_s *cb_info) cb_info->get_filename = NULL; } + REC_LOG_WARNING("release cb_info[%p]", cb_info); + g_free(cb_info); cb_info = NULL;