From: Jeongmo Yang Date: Mon, 11 Jul 2016 02:29:28 +0000 (+0900) Subject: [Release 0.10.61] TSAM-6195 : Fix crash when stop camera X-Git-Tag: submit/tizen/20160711.030104^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d70efd3df4d04a28963f4df0ee32569fc6fb0436;p=platform%2Fcore%2Fmultimedia%2Flibmm-camcorder.git [Release 0.10.61] TSAM-6195 : Fix crash when stop camera Change-Id: I5501b9b90c2c2cc1dd9b0f878b5b32e950a554f8 Signed-off-by: Jeongmo Yang --- diff --git a/packaging/libmm-camcorder.spec b/packaging/libmm-camcorder.spec index 2707df5..2efda55 100644 --- a/packaging/libmm-camcorder.spec +++ b/packaging/libmm-camcorder.spec @@ -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 diff --git a/src/mm_camcorder_internal.c b/src/mm_camcorder_internal.c index 80783a6..528f188 100644 --- a/src/mm_camcorder_internal.c +++ b/src/mm_camcorder_internal.c @@ -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); } diff --git a/src/mm_camcorder_resource.c b/src/mm_camcorder_resource.c index d142863..7570854 100644 --- a/src/mm_camcorder_resource.c +++ b/src/mm_camcorder_resource.c @@ -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; }