[Release 0.10.61] TSAM-6195 : Fix crash when stop camera 16/79316/1 accepted/tizen/common/20160711.170410 accepted/tizen/ivi/20160711.084333 accepted/tizen/mobile/20160711.084108 accepted/tizen/tv/20160711.084215 accepted/tizen/wearable/20160711.084143 submit/tizen/20160711.030104
authorJeongmo Yang <jm80.yang@samsung.com>
Mon, 11 Jul 2016 02:29:28 +0000 (11:29 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Mon, 11 Jul 2016 02:31:47 +0000 (11:31 +0900)
Change-Id: I5501b9b90c2c2cc1dd9b0f878b5b32e950a554f8
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
packaging/libmm-camcorder.spec
src/mm_camcorder_internal.c
src/mm_camcorder_resource.c

index 2707df5..2efda55 100644 (file)
@@ -2,7 +2,7 @@
 
 Name:       libmm-camcorder
 Summary:    Camera and recorder library
-Version:    0.10.60
+Version:    0.10.61
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index 80783a6..528f188 100644 (file)
@@ -1153,6 +1153,7 @@ int _mmcamcorder_realize(MMHandleType handle)
                        _mmcam_dbg_err("could not acquire resources");
 
                        _mmcamcorder_resource_manager_unprepare(&hcamcorder->resource_manager);
+
                        goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK;
                }
 
@@ -1336,7 +1337,9 @@ int _mmcamcorder_unrealize(MMHandleType handle)
                        ret = MM_ERROR_CAMCORDER_INTERNAL;
                        goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK;
                }
+               _MMCAMCORDER_LOCK_RESOURCE(hcamcorder);
                ret = _mmcamcorder_resource_manager_unprepare(&hcamcorder->resource_manager);
+               _MMCAMCORDER_UNLOCK_RESOURCE(hcamcorder);
                if (ret != MM_ERROR_NONE) {
                        _mmcam_dbg_err("failed to unprepare resource manager, ret(0x%x)", ret);
                }
index d142863..7570854 100644 (file)
@@ -136,8 +136,11 @@ static void __mmcamcorder_resource_set_state_callback(mrp_res_context_t *cx, con
 
        mmf_return_if_fail((MMHandleType)camcorder);
 
+       _MMCAMCORDER_LOCK_RESOURCE(camcorder);
+
        if (!mrp_res_equal_resource_set(rs, camcorder->resource_manager.rset)) {
                _mmcam_dbg_warn("- resource set(%p) is not same as this camcorder handle's(%p)", rs, camcorder->resource_manager.rset);
+               _MMCAMCORDER_UNLOCK_RESOURCE(camcorder);
                return;
        }
 
@@ -153,8 +156,6 @@ static void __mmcamcorder_resource_set_state_callback(mrp_res_context_t *cx, con
                                res->name, __mmcamcorder_resource_state_to_str(res->state));
 
                        if (res->state == MRP_RES_RESOURCE_ACQUIRED) {
-                               _MMCAMCORDER_LOCK_RESOURCE(camcorder);
-
                                camcorder->resource_manager.acquire_count--;
 
                                if (camcorder->resource_manager.acquire_count <= 0) {
@@ -164,8 +165,6 @@ static void __mmcamcorder_resource_set_state_callback(mrp_res_context_t *cx, con
                                        _mmcam_dbg_warn("remained acquire count %d",
                                                camcorder->resource_manager.acquire_count);
                                }
-
-                               _MMCAMCORDER_UNLOCK_RESOURCE(camcorder);
                        }
                }
        }
@@ -173,6 +172,8 @@ static void __mmcamcorder_resource_set_state_callback(mrp_res_context_t *cx, con
        mrp_res_delete_resource_set(camcorder->resource_manager.rset);
        camcorder->resource_manager.rset = mrp_res_copy_resource_set(rs);
 
+       _MMCAMCORDER_UNLOCK_RESOURCE(camcorder);
+
        return;
 }