From: Jeongmo Yang Date: Tue, 14 May 2024 00:18:41 +0000 (+0900) Subject: Free idle event in idle callback only. X-Git-Tag: accepted/tizen/8.0/unified/20240701.172933~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=eebaf74919bca2e6f2b235a6b4ac2b40d4b7357a;p=platform%2Fcore%2Fapi%2Fcamera.git Free idle event in idle callback only. - It seems that idle callback can be remained although g_idle_remove_by_data() returns TRUE. It will cause the crash when idle callback is called after camera handle is destroyed. [Version] 0.4.119 [Issue Type] Improvement Change-Id: I3d0c51ffbd928e95cf72603b4a52497ed327791f Signed-off-by: Jeongmo Yang --- diff --git a/packaging/capi-media-camera.spec b/packaging/capi-media-camera.spec index 2c01ab2..147ca36 100644 --- a/packaging/capi-media-camera.spec +++ b/packaging/capi-media-camera.spec @@ -1,6 +1,6 @@ Name: capi-media-camera Summary: A Camera API -Version: 0.4.118 +Version: 0.4.119 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/camera.c b/src/camera.c index 6b95317..bd33b1e 100644 --- a/src/camera.c +++ b/src/camera.c @@ -1765,7 +1765,7 @@ static gboolean __camera_idle_event_callback(gpointer data) cb_info = cam_idle_event->cb_info; if (cb_info == NULL) { - CAM_LOG_WARNING("camera cb_info is NULL. event %p %d", cam_idle_event, cam_idle_event->event); + CAM_LOG_WARNING("NULL cb_info for event[%d] %p", cam_idle_event->event, cam_idle_event); g_mutex_unlock(&g_cam_idle_event_lock); goto IDLE_EVENT_CALLBACK_DONE; } @@ -1782,7 +1782,6 @@ static gboolean __camera_idle_event_callback(gpointer data) IDLE_EVENT_CALLBACK_DONE: /* release event */ g_free(cam_idle_event); - cam_idle_event = NULL; return FALSE; } @@ -1960,18 +1959,8 @@ static void __camera_deactivate_idle_event_all(camera_cb_info_s *cb_info) continue; } - if (g_idle_remove_by_data(cam_idle_event)) { - CAM_LOG_WARNING("remove idle event %p done", cam_idle_event); - - cb_info->idle_event_list = g_list_remove(cb_info->idle_event_list, (gpointer)cam_idle_event); - - g_free(cam_idle_event); - - continue; - } - - CAM_LOG_WARNING("set NULL cb_info for event %p %d, it will be freed on idle callback", - cam_idle_event, cam_idle_event->event); + CAM_LOG_WARNING("set NULL cb_info for event[%d] %p, it will be freed on idle callback", + cam_idle_event->event, cam_idle_event); cam_idle_event->cb_info = NULL;