From: Tim-Philipp Müller Date: Mon, 24 May 2010 18:06:45 +0000 (+0100) Subject: tagsetter: make sure only one thread creates the TagData X-Git-Tag: RELEASE-0.10.30~158 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3ea8b4744508930a83302b9d8d9dc5283754bc55;p=platform%2Fupstream%2Fgstreamer.git tagsetter: make sure only one thread creates the TagData --- diff --git a/gst/gsttagsetter.c b/gst/gsttagsetter.c index 176dcea..4da295c 100644 --- a/gst/gsttagsetter.c +++ b/gst/gsttagsetter.c @@ -143,12 +143,20 @@ gst_tag_setter_get_data (GstTagSetter * setter) data = g_object_get_qdata (G_OBJECT (setter), gst_tag_key); if (!data) { - data = g_slice_new (GstTagData); - g_static_mutex_init (&data->lock); - data->list = NULL; - data->mode = GST_TAG_MERGE_KEEP; - g_object_set_qdata_full (G_OBJECT (setter), gst_tag_key, data, - gst_tag_data_free); + static GStaticMutex create_mutex = G_STATIC_MUTEX_INIT; + + /* make sure no other thread is creating a GstTagData at the same time */ + g_static_mutex_lock (&create_mutex); + data = g_object_get_qdata (G_OBJECT (setter), gst_tag_key); + if (!data) { + data = g_slice_new (GstTagData); + g_static_mutex_init (&data->lock); + data->list = NULL; + data->mode = GST_TAG_MERGE_KEEP; + g_object_set_qdata_full (G_OBJECT (setter), gst_tag_key, data, + gst_tag_data_free); + } + g_static_mutex_unlock (&create_mutex); } return data;