gst/rtpmanager/gstrtpbin.c: Release lock before emitting the request-pt-map signal.
authorOlivier Crete <tester@tester.ca>
Tue, 5 Aug 2008 08:58:27 +0000 (08:58 +0000)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Tue, 11 Aug 2009 01:30:37 +0000 (02:30 +0100)
Original commit message from CVS:
Patch by: Olivier Crete <tester at tester dot ca>
* gst/rtpmanager/gstrtpbin.c: (get_pt_map):
Release lock before emitting the request-pt-map signal.
Fixes #543480.

gst/rtpmanager/gstrtpbin.c

index 44b2235e15f709b9bcd0fd4ba9dc2ea98c2d8f79..f3e9537067ddce6c4e315d50f911afb4eb6d3576 100644 (file)
@@ -618,11 +618,24 @@ get_pt_map (GstRtpBinSession * session, guint pt)
   g_value_init (&ret, GST_TYPE_CAPS);
   g_value_set_boxed (&ret, NULL);
 
+  GST_RTP_SESSION_UNLOCK (session);
+
   g_signal_emitv (args, gst_rtp_bin_signals[SIGNAL_REQUEST_PT_MAP], 0, &ret);
 
+  GST_RTP_SESSION_LOCK (session);
+
   g_value_unset (&args[0]);
   g_value_unset (&args[1]);
   g_value_unset (&args[2]);
+
+  /* look in the cache again because we let the lock go */
+  caps = g_hash_table_lookup (session->ptmap, GINT_TO_POINTER (pt));
+  if (caps) {
+    gst_caps_ref (caps);
+    g_value_unset (&ret);
+    goto done;
+  }
+
   caps = (GstCaps *) g_value_dup_boxed (&ret);
   g_value_unset (&ret);
   if (!caps)