From: Eunhae Choi Date: Tue, 24 Oct 2017 05:34:01 +0000 (+0900) Subject: [0.6.76] fix crash issue during destroy X-Git-Tag: submit/tizen_4.0/20171024.060444^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b7a7a9ab8c8fb536bd60252cb78e0bf7b760271d;p=platform%2Fcore%2Fmultimedia%2Flibmm-player.git [0.6.76] fix crash issue during destroy buffering msg can be delievered right after _destroy is called but the player handle is still valid. Add checking the pipeline validation as soon as getting cmd lock. and check mutex lock state before clearing it. Change-Id: I043801f39480dfd0d54d3a7cc9803528bb32f51c --- diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec index 3895f5b..2b976ff 100644 --- a/packaging/libmm-player.spec +++ b/packaging/libmm-player.spec @@ -1,6 +1,6 @@ Name: libmm-player Summary: Multimedia Framework Player Library -Version: 0.6.75 +Version: 0.6.76 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/mm_player.c b/src/mm_player.c index 3fe4b30..108a6db 100644 --- a/src/mm_player.c +++ b/src/mm_player.c @@ -110,6 +110,11 @@ int mm_player_destroy(MMHandleType player) MMPLAYER_CMD_UNLOCK(player); + /* to make sure unlocked. + @see __mmplayer_gst_callback, GST_MESSAGE_BUFFERING handling */ + MMPLAYER_CMD_LOCK(player); + MMPLAYER_CMD_UNLOCK(player); + g_mutex_clear(&((mm_player_t*)player)->cmd_lock); g_mutex_clear(&((mm_player_t*)player)->playback_lock); diff --git a/src/mm_player_priv.c b/src/mm_player_priv.c index d9bd890..38b9cc7 100644 --- a/src/mm_player_priv.c +++ b/src/mm_player_priv.c @@ -1297,6 +1297,11 @@ __mmplayer_gst_callback(GstBus *bus, GstMessage *msg, gpointer data) } } else { MMPLAYER_CMD_LOCK(player); + if (!player->pipeline) { /* during destroy, msg can be delivered. */ + LOGE("pipeline is destroyed."); + MMPLAYER_CMD_UNLOCK(player); + break; + } } __mmplayer_update_buffer_setting(player, msg);