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/unified/20240701.191826^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c4b776564bca5e298217dda2c2daf2f86b5e291e;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] 1.1.1 [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 c345d7b..ea82674 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: 1.1.0 +Version: 1.1.1 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/camera.c b/src/camera.c index 3e02fa0..e1cf445 100644 --- a/src/camera.c +++ b/src/camera.c @@ -1750,7 +1750,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; } @@ -1767,7 +1767,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; } @@ -1943,18 +1942,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;