diff options
author | Jeongmo Yang <jm80.yang@samsung.com> | 2020-08-27 16:47:53 +0900 |
---|---|---|
committer | Jeongmo Yang <jm80.yang@samsung.com> | 2020-08-27 17:14:46 +0900 |
commit | fdf9b8c68d12766ccc7912db1d38013144747b3c (patch) | |
tree | 3da9866bbda9a7de1ead488a3ee90d6752c71a6b | |
parent | f4949bd8ab42bdaa1abf9aac2424421393951853 (diff) | |
download | mmsvc-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.c | 21 | ||||
-rw-r--r-- | packaging/mmsvc-recorder.spec | 2 |
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 |