[v0.6.22] Add mutex for update_tag_msg 37/108837/1 accepted/tizen/3.0/common/20170109.200314 accepted/tizen/3.0/ivi/20170106.095353 accepted/tizen/3.0/mobile/20170106.095254 accepted/tizen/3.0/tv/20170106.095315 accepted/tizen/3.0/wearable/20170106.095333 submit/tizen_3.0/20170106.061101
authorGilbok Lee <gilbok.lee@samsung.com>
Fri, 6 Jan 2017 04:19:11 +0000 (13:19 +0900)
committerGilbok Lee <gilbok.lee@samsung.com>
Fri, 6 Jan 2017 04:19:14 +0000 (13:19 +0900)
In pcm extraction mode, crash by posting album art tag messages from two sinks at the same time.

Change-Id: I2dc408edab1b9c2b520ed0ff73c1dc8862fa956f

packaging/libmm-player.spec
src/include/mm_player_priv.h
src/include/mm_player_utils.h
src/mm_player_priv.c

index 242160d..3cd343f 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-player
 Summary:    Multimedia Framework Player Library
-Version:    0.6.21
+Version:    0.6.22
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index 911dd62..33b2fda 100644 (file)
@@ -485,6 +485,9 @@ typedef struct {
        /* fakesink handling lock */
        GMutex fsink_lock;
 
+       /* update tag lock */
+       GMutex update_tag_lock;
+
        /* player attributes */
        MMHandleType attrs;
 
index 4249afe..099986f 100644 (file)
@@ -85,6 +85,11 @@ x = NULL;
 #define MMPLAYER_FSINK_LOCK(x_player)                        g_mutex_lock(&((mm_player_t *)x_player)->fsink_lock)
 #define MMPLAYER_FSINK_UNLOCK(x_player)                      g_mutex_unlock(&((mm_player_t *)x_player)->fsink_lock)
 
+
+/* handling update tag */
+#define MMPLAYER_UPDATE_TAG_LOCK(x_player)                   g_mutex_lock(&((mm_player_t *)x_player)->update_tag_lock)
+#define MMPLAYER_UPDATE_TAG_UNLOCK(x_player)                 g_mutex_unlock(&((mm_player_t *)x_player)->update_tag_lock)
+
 /* video stream bo */
 #define MMPLAYER_VIDEO_BO_LOCK(x_player)                     g_mutex_lock(&((mm_player_t *)x_player)->video_bo_mutex)
 #define MMPLAYER_VIDEO_BO_UNLOCK(x_player)                   g_mutex_unlock(&((mm_player_t *)x_player)->video_bo_mutex)
index e3e2eaf..74edc32 100644 (file)
@@ -1923,7 +1923,9 @@ if (gst_tag_list_get_double(tag_list, gsttag, &v_double)) {\
        MMPLAYER_UPDATE_TAG_STRING(GST_TAG_AUDIO_CODEC, attrs, "content_audio_codec");
        MMPLAYER_UPDATE_TAG_UINT(GST_TAG_BITRATE, attrs, "content_bitrate");
        MMPLAYER_UPDATE_TAG_UINT(GST_TAG_MAXIMUM_BITRATE, attrs, "content_max_bitrate");
+       MMPLAYER_UPDATE_TAG_LOCK(player);
        MMPLAYER_UPDATE_TAG_IMAGE(GST_TAG_IMAGE, attrs, "tag_album_cover");
+       MMPLAYER_UPDATE_TAG_UNLOCK(player);
        /* MMPLAYER_UPDATE_TAG_UINT(GST_TAG_NOMINAL_BITRATE, ?, ?); */
        /* MMPLAYER_UPDATE_TAG_UINT(GST_TAG_MINIMUM_BITRATE, ?, ?); */
        /* MMPLAYER_UPDATE_TAG_UINT(GST_TAG_SERIAL, ?, ?); */
@@ -8561,6 +8563,9 @@ _mmplayer_create_player(MMHandleType handle) // @
        /* create lock. note that g_tread_init() has already called in gst_init() */
        g_mutex_init(&player->fsink_lock);
 
+       /* create update tag lock */
+       g_mutex_init(&player->update_tag_lock);
+
        /* create repeat mutex */
        g_mutex_init(&player->repeat_thread_mutex);
 
@@ -8653,6 +8658,9 @@ ERROR:
        /* free lock */
        g_mutex_clear(&player->fsink_lock);
 
+       /* free update tag lock */
+       g_mutex_clear(&player->update_tag_lock);
+
        /* free thread */
        if (player->repeat_thread) {
                player->repeat_thread_exit = TRUE;
@@ -8960,6 +8968,9 @@ _mmplayer_destroy(MMHandleType handle) // @
        /* release lock */
        g_mutex_clear(&player->fsink_lock);
 
+       /* release lock */
+       g_mutex_clear(&player->update_tag_lock);
+
        /* release video bo lock and cond */
        g_mutex_clear(&player->video_bo_mutex);
        g_cond_clear(&player->video_bo_cond);