Remove remained idle callback when destroy handle 86/159986/1 tizen_4.0_tv accepted/tizen/4.0/unified/20171116.060607 submit/tizen_4.0/20171115.073622 tizen_4.0.IoT.p2_release
authorJeongmo Yang <jm80.yang@samsung.com>
Tue, 14 Nov 2017 04:43:06 +0000 (13:43 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Tue, 14 Nov 2017 04:47:36 +0000 (13:47 +0900)
The crash could be occurred if idle callback is called after so is unloaded.
To avoid it, remove not-called idle event when destroy handle.

[Version] 0.3.8
[Profile] Common
[Issue Type] Bug fix
[Dependency module] N/A
[Test] [M(T) - Boot=(OK), sdb=(OK), Home=(OK), Touch=(OK), Version=tizen-unified_20171107.4]

Change-Id: Icecce81cc7e8217beffd112733bc68e6170f0240
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
packaging/capi-media-camera.spec
src/camera.c

index 6c4825b53f4d885f4855ed28cbf3363b88bbcfa0..ef01eeadfc69a7909d8df6350be7bb6c27c9bbfc 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-camera
 Summary:    A Camera API
-Version:    0.3.7
+Version:    0.3.8
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index bcc0ede6d6bed99f616bce36d2850016e81c858e..af835784b1202734cc793eda59728d5d9e5a7f3d 100644 (file)
@@ -1792,6 +1792,20 @@ static void _camera_deactivate_idle_event_all(camera_cb_info_s *cb_info)
                        continue;
                }
 
+               if (g_idle_remove_by_data(cam_idle_event)) {
+                       LOGW("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_mutex_clear(&cam_idle_event->event_mutex);
+                       g_free(cam_idle_event);
+                       cam_idle_event = NULL;
+
+                       continue;
+               }
+
+               LOGW("remove idle event %p failed", cam_idle_event);
+
                if (!g_mutex_trylock(&cam_idle_event->event_mutex)) {
                        LOGW("lock failed, %p event is calling now", cam_idle_event);
 
@@ -2702,6 +2716,8 @@ int camera_destroy(camera_h camera)
                pc = NULL;
        }
 
+       LOGD("ret : 0x%x", ret);
+
        return ret;
 }