From de61b4502552be0ff578857d999ccef4bd6420c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 2 Mar 2009 16:27:55 +0100 Subject: xdgmime: Add locking to the xdg_mime_* calls as it's not thread-safe --- gst/xdgmime/gstxdgmime.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/gst/xdgmime/gstxdgmime.c b/gst/xdgmime/gstxdgmime.c index c2eec58d..1307779e 100644 --- a/gst/xdgmime/gstxdgmime.c +++ b/gst/xdgmime/gstxdgmime.c @@ -26,6 +26,8 @@ GST_DEBUG_CATEGORY (xdgmime_debug); #define GST_CAT_DEFAULT xdgmime_debug +G_LOCK_DEFINE_STATIC (xdg_lock); + static void xdgmime_typefind (GstTypeFind * find, gpointer user_data) { @@ -42,7 +44,14 @@ xdgmime_typefind (GstTypeFind * find, gpointer user_data) if ((data = gst_type_find_peek (find, 0, length)) == NULL) return; + /* FIXME: xdg-mime is not thread-safe as it stores the cache globally + * and updates it from every call if changes were done without + * any locking + */ + G_LOCK (xdg_lock); mimetype = xdg_mime_get_mime_type_for_data (data, length, &prio); + G_UNLOCK (xdg_lock); + if (mimetype == NULL || g_str_equal (mimetype, XDG_MIME_TYPE_UNKNOWN)) return; -- cgit v1.2.1