diff options
author | Eunhae Choi <eunhae1.choi@samsung.com> | 2017-11-23 10:30:23 +0900 |
---|---|---|
committer | Eunhae Choi <eunhae1.choi@samsung.com> | 2017-11-23 10:30:23 +0900 |
commit | 0d16606a02d304db23fb0cc2385eb4ba4a2e33a6 (patch) | |
tree | dac844383d5b2f17ba9234018571c96f5eeaa1de | |
parent | c44aed4b9a6daa66a985c9d1c8fc545040a4d671 (diff) | |
download | libmm-player-0d16606a02d304db23fb0cc2385eb4ba4a2e33a6.tar.gz libmm-player-0d16606a02d304db23fb0cc2385eb4ba4a2e33a6.tar.bz2 libmm-player-0d16606a02d304db23fb0cc2385eb4ba4a2e33a6.zip |
[0.6.63] fix crash during destroysubmit/tizen_3.0/20171123.081321accepted/tizen/3.0/wearable/20171127.041613accepted/tizen/3.0/tv/20171127.041609accepted/tizen/3.0/mobile/20171127.041605accepted/tizen/3.0/common/20171127.084414
Change-Id: Id03363569c9aebe4585bc7a5d12d0cdf564d7d65
-rw-r--r-- | packaging/libmm-player.spec | 2 | ||||
-rw-r--r-- | src/mm_player.c | 5 | ||||
-rw-r--r-- | src/mm_player_priv.c | 37 |
3 files changed, 30 insertions, 14 deletions
diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec index 6bbd957..eaa2844 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.62 +Version: 0.6.63 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/mm_player.c b/src/mm_player.c index dcac88c..b420446 100644 --- a/src/mm_player.c +++ b/src/mm_player.c @@ -112,6 +112,11 @@ int mm_player_destroy(MMHandleType player) result = _mmplayer_destroy(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); diff --git a/src/mm_player_priv.c b/src/mm_player_priv.c index bc1db16..fc52174 100644 --- a/src/mm_player_priv.c +++ b/src/mm_player_priv.c @@ -1282,22 +1282,13 @@ __mmplayer_gst_callback(GstBus *bus, GstMessage *msg, gpointer data) // @ MMMessageParamType msg_param = {0, }; int bRet = MM_ERROR_NONE; - if (!MMPLAYER_IS_STREAMING(player)) + if (!(player->pipeline && player->pipeline->mainbin)) { + LOGE("player pipeline handle is null"); break; + } - /* ignore the prev buffering message */ - if ((player->streamer) && (player->streamer->is_buffering == FALSE) && (player->streamer->is_buffering_done == TRUE)) { - gint buffer_percent = 0; - - gst_message_parse_buffering(msg, &buffer_percent); - - if (buffer_percent == MAX_BUFFER_PERCENT) { - LOGD("Ignored all the previous buffering msg!(got %d%%)\n", buffer_percent); - player->streamer->is_buffering_done = FALSE; - } - + if (!MMPLAYER_IS_STREAMING(player)) break; - } if (player->pd_mode == MM_PLAYER_PD_MODE_URI) { if (!MMPLAYER_CMD_TRYLOCK(player)) { @@ -1314,6 +1305,26 @@ __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; + } + } + + /* ignore the prev buffering message */ + if ((player->streamer) && (player->streamer->is_buffering == FALSE) + && (player->streamer->is_buffering_done == TRUE)) { + gint buffer_percent = 0; + + gst_message_parse_buffering(msg, &buffer_percent); + + if (buffer_percent == MAX_BUFFER_PERCENT) { + LOGD("Ignored all the previous buffering msg!(got %d%%)\n", buffer_percent); + player->streamer->is_buffering_done = FALSE; + } + MMPLAYER_CMD_UNLOCK(player); + break; } __mmplayer_update_buffer_setting(player, msg); |