summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeongmo Yang <jm80.yang@samsung.com>2020-08-27 16:47:53 +0900
committerJeongmo Yang <jm80.yang@samsung.com>2020-08-27 17:14:46 +0900
commitfdf9b8c68d12766ccc7912db1d38013144747b3c (patch)
tree3da9866bbda9a7de1ead488a3ee90d6752c71a6b
parentf4949bd8ab42bdaa1abf9aac2424421393951853 (diff)
downloadmmsvc-recorder-fdf9b8c68d12766ccc7912db1d38013144747b3c.tar.gz
mmsvc-recorder-fdf9b8c68d12766ccc7912db1d38013144747b3c.tar.bz2
mmsvc-recorder-fdf9b8c68d12766ccc7912db1d38013144747b3c.zip
Fix crash - call function in unloaded so filesubmit/tizen/20200827.083640accepted/tizen/unified/20200828.121520
- In recorder_dispatcher_destroy(), camera_remove_export_data() is always called, but it could not be called if there is no camera data. Because "libmuse-recorder.so" does not have dependency to "libmuse-camera.so" which has camera_remove_export_data(). "libmuse-camera.so" will be loaded when camera_data is used. [Version] 0.3.22 [Issue Type] Bug fix Change-Id: I4e49ef3f07a1b41ba5f547ec1824c4a662291300 Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
-rw-r--r--muse/src/muse_recorder_dispatcher.c21
-rw-r--r--packaging/mmsvc-recorder.spec2
2 files changed, 16 insertions, 7 deletions
diff --git a/muse/src/muse_recorder_dispatcher.c b/muse/src/muse_recorder_dispatcher.c
index 5f74528..1853533 100644
--- a/muse/src/muse_recorder_dispatcher.c
+++ b/muse/src/muse_recorder_dispatcher.c
@@ -568,7 +568,7 @@ static void _recorder_export_data_free(gpointer data)
if (!export_data)
return;
- LOGD("fd[%d], bo[%p]", export_data->fd, export_data->bo);
+ /*LOGD("fd[%d], bo[%p]", export_data->fd, export_data->bo);*/
/* unref bo */
if (export_data->bo) {
@@ -591,7 +591,7 @@ static void _recorder_export_data_free(gpointer data)
static int _recorder_export_data_compare(gconstpointer data, gconstpointer fd_to_find)
{
- LOGD("%d : %d", ((muse_recorder_export_data *)data)->fd, GPOINTER_TO_INT(fd_to_find));
+ /*LOGD("%d : %d", ((muse_recorder_export_data *)data)->fd, GPOINTER_TO_INT(fd_to_find));*/
return (((muse_recorder_export_data *)data)->fd != GPOINTER_TO_INT(fd_to_find));
}
@@ -770,8 +770,15 @@ int recorder_dispatcher_destroy(muse_module_h module)
ret = legacy_recorder_destroy(muse_recorder->recorder_handle);
if (ret == RECORDER_ERROR_NONE) {
- _recorder_remove_export_data(&muse_recorder->recorder_data, -1);
- camera_remove_export_data(&muse_recorder->camera_data, -1);
+ if (muse_recorder->recorder_data.list)
+ _recorder_remove_export_data(&muse_recorder->recorder_data, -1);
+ if (muse_recorder->camera_data.list) {
+ /* camera_remove_export_data() should not be called if no camera data,
+ otherwise it will be crashed because libmuse-recorder.so does not have dependency
+ to libmuse-camera.so which has camera_remove_export_data().
+ libmuse-camera.so will be loaded when camera_data is used. */
+ camera_remove_export_data(&muse_recorder->camera_data, -1);
+ }
g_cond_clear(&muse_recorder->camera_data.cond);
g_mutex_clear(&muse_recorder->camera_data.lock);
@@ -2387,8 +2394,10 @@ static int recorder_cmd_dispatcher_shutdown(muse_module_h module)
case RECORDER_STATE_CREATED:
ret = legacy_recorder_destroy(muse_recorder->recorder_handle);
if (ret == RECORDER_ERROR_NONE) {
- _recorder_remove_export_data(&muse_recorder->recorder_data, -1);
- camera_remove_export_data(&muse_recorder->camera_data, -1);
+ if (muse_recorder->recorder_data.list)
+ _recorder_remove_export_data(&muse_recorder->recorder_data, -1);
+ if (muse_recorder->camera_data.list)
+ camera_remove_export_data(&muse_recorder->camera_data, -1);
g_cond_clear(&muse_recorder->camera_data.cond);
g_mutex_clear(&muse_recorder->camera_data.lock);
diff --git a/packaging/mmsvc-recorder.spec b/packaging/mmsvc-recorder.spec
index 692b662..ac79538 100644
--- a/packaging/mmsvc-recorder.spec
+++ b/packaging/mmsvc-recorder.spec
@@ -1,6 +1,6 @@
Name: mmsvc-recorder
Summary: A Recorder module for muse server
-Version: 0.3.21
+Version: 0.3.22
Release: 0
Group: Multimedia/Libraries
License: Apache-2.0