{
GstTagMergeMode mode;
GstTagList *list;
- GStaticMutex lock;
+ GMutex lock;
} GstTagData;
+#define GST_TAG_DATA_LOCK(data) g_mutex_lock(&data->lock)
+#define GST_TAG_DATA_UNLOCK(data) g_mutex_unlock(&data->lock)
+
GType
gst_tag_setter_get_type (void)
{
GstTagData *data = (GstTagData *) p;
if (data->list)
- gst_tag_list_free (data->list);
+ gst_tag_list_unref (data->list);
- g_static_mutex_free (&data->lock);
+ g_mutex_clear (&data->lock);
g_slice_free (GstTagData, data);
}
data = g_object_get_qdata (G_OBJECT (setter), gst_tag_key);
if (!data) {
- 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);
+ static GMutex create_mutex; /* no initialisation required */
+
+ g_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);
+ g_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);
+
+ g_mutex_unlock (&create_mutex);
}
return data;
data = gst_tag_setter_get_data (setter);
- g_static_mutex_lock (&data->lock);
+ GST_TAG_DATA_LOCK (data);
if (data->list) {
- gst_tag_list_free (data->list);
+ gst_tag_list_unref (data->list);
data->list = NULL;
}
- g_static_mutex_unlock (&data->lock);
+ GST_TAG_DATA_UNLOCK (data);
}
/**
data = gst_tag_setter_get_data (setter);
- g_static_mutex_lock (&data->lock);
+ GST_TAG_DATA_LOCK (data);
if (data->list == NULL) {
if (mode != GST_TAG_MERGE_KEEP_ALL)
data->list = gst_tag_list_copy (list);
} else {
gst_tag_list_insert (data->list, list, mode);
}
- g_static_mutex_unlock (&data->lock);
+ GST_TAG_DATA_UNLOCK (data);
}
/**
data = gst_tag_setter_get_data (setter);
- g_static_mutex_lock (&data->lock);
+ GST_TAG_DATA_LOCK (data);
if (!data->list)
data->list = gst_tag_list_new_empty ();
gst_tag_list_add_valist (data->list, mode, tag, var_args);
- g_static_mutex_unlock (&data->lock);
+ GST_TAG_DATA_UNLOCK (data);
}
/**
data = gst_tag_setter_get_data (setter);
- g_static_mutex_lock (&data->lock);
+ GST_TAG_DATA_LOCK (data);
if (!data->list)
data->list = gst_tag_list_new_empty ();
gst_tag_list_add_valist_values (data->list, mode, tag, var_args);
- g_static_mutex_unlock (&data->lock);
+ GST_TAG_DATA_UNLOCK (data);
}
/**
data = gst_tag_setter_get_data (setter);
- g_static_mutex_lock (&data->lock);
+ GST_TAG_DATA_LOCK (data);
if (!data->list)
data->list = gst_tag_list_new_empty ();
gst_tag_list_add_value (data->list, mode, tag, value);
- g_static_mutex_unlock (&data->lock);
+ GST_TAG_DATA_UNLOCK (data);
}
/**
data = gst_tag_setter_get_data (setter);
- g_static_mutex_lock (&data->lock);
+ GST_TAG_DATA_LOCK (data);
data->mode = mode;
- g_static_mutex_unlock (&data->lock);
+ GST_TAG_DATA_UNLOCK (data);
}
/**
data = gst_tag_setter_get_data (setter);
- g_static_mutex_lock (&data->lock);
+ GST_TAG_DATA_LOCK (data);
mode = data->mode;
- g_static_mutex_unlock (&data->lock);
+ GST_TAG_DATA_UNLOCK (data);
return mode;
}