[gst-cvs] gst-plugins-bad: xdgmime: Add locking to the xdg_mime_* calls as it' s not thread-safe

Sebastian Dröge slomo at kemper.freedesktop.org
Mon Mar 2 07:29:26 PST 2009


Module: gst-plugins-bad
Branch: master
Commit: de61b4502552be0ff578857d999ccef4bd6420c2
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=de61b4502552be0ff578857d999ccef4bd6420c2

Author: Sebastian Dröge <sebastian.droege at collabora.co.uk>
Date:   Mon Mar  2 16:27:55 2009 +0100

xdgmime: Add locking to the xdg_mime_* calls as it's not thread-safe

---

 gst/xdgmime/gstxdgmime.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/gst/xdgmime/gstxdgmime.c b/gst/xdgmime/gstxdgmime.c
index c2eec58..1307779 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;
 





More information about the Gstreamer-commits mailing list