[0.6.76] fix crash issue during destroy 91/157291/1 submit/tizen_4.0/20171024.060444
authorEunhae Choi <eunhae1.choi@samsung.com>
Tue, 24 Oct 2017 05:34:01 +0000 (14:34 +0900)
committerEunhae Choi <eunhae1.choi@samsung.com>
Tue, 24 Oct 2017 05:34:04 +0000 (14:34 +0900)
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

packaging/libmm-player.spec
src/mm_player.c
src/mm_player_priv.c

index 3895f5b2d4fafa96baeee7bc7d67ae67bc243ead..2b976ff7434fd805d45fc8409b05c581303c11d5 100644 (file)
@@ -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
index 3fe4b30d7e02e7dbc15252677baa1d436bb2f8b6..108a6db064fa7d8aced572d1f3a539f6d3aaf3ab 100644 (file)
@@ -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);
 
index d9bd890bdd523b0c5ac3029786fdd969d8344ece..38b9cc7c977c79093d17d37db15d1527ba845fff 100644 (file)
@@ -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);