From 3ea8b4744508930a83302b9d8d9dc5283754bc55 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim-Philipp=20M=C3=BCller?= Date: Mon, 24 May 2010 19:06:45 +0100 Subject: [PATCH] tagsetter: make sure only one thread creates the TagData --- gst/gsttagsetter.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) 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; -- 2.7.4