qtmux: Take lock around use of (non-threadsafe) tagsetter interface.
authorMichael Smith <msmith@songbirdnest.com>
Fri, 26 Feb 2010 19:50:25 +0000 (11:50 -0800)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Tue, 12 Apr 2011 19:32:16 +0000 (20:32 +0100)
gst/quicktime/gstqtmux.c

index 3279e55..085ae92 100644 (file)
@@ -302,7 +302,10 @@ gst_qt_mux_reset (GstQTMux * qtmux, gboolean alloc)
     fclose (qtmux->moov_recov_file);
     qtmux->moov_recov_file = NULL;
   }
+
+  GST_OBJECT_LOCK (qtmux);
   gst_tag_setter_reset_tags (GST_TAG_SETTER (qtmux));
+  GST_OBJECT_UNLOCK (qtmux);
 
   /* reset pad data */
   for (walk = qtmux->sinkpads; walk; walk = g_slist_next (walk)) {
@@ -957,7 +960,9 @@ gst_qt_mux_setup_metadata (GstQTMux * qtmux)
 {
   const GstTagList *tags;
 
+  GST_OBJECT_LOCK (qtmux);
   tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (qtmux));
+  GST_OBJECT_UNLOCK (qtmux);
 
   GST_LOG_OBJECT (qtmux, "tags: %" GST_PTR_FORMAT, tags);
 
@@ -2450,11 +2455,16 @@ gst_qt_mux_sink_event (GstPad * pad, GstEvent * event)
     case GST_EVENT_TAG:{
       GstTagList *list;
       GstTagSetter *setter = GST_TAG_SETTER (qtmux);
-      const GstTagMergeMode mode = gst_tag_setter_get_tag_merge_mode (setter);
+      GstTagMergeMode mode;
+
+      GST_OBJECT_LOCK (qtmux);
+      mode = gst_tag_setter_get_tag_merge_mode (setter);
 
       GST_DEBUG_OBJECT (qtmux, "received tag event");
       gst_event_parse_tag (event, &list);
+
       gst_tag_setter_merge_tags (setter, list, mode);
+      GST_OBJECT_UNLOCK (qtmux);
       break;
     }
     default: