summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlivier Crete <tester@tester.ca>2008-08-05 08:58:27 +0000
committerWim Taymans <wim.taymans@gmail.com>2008-08-05 08:58:27 +0000
commitefc6bf88850d0c7cc5679a9ca89e33b0b1c806dc (patch)
tree922722d16782572825c69b0a5a10372727ecff27
parent8a35b0101a703718e52a3b12c8a8777572b9f150 (diff)
downloadgst-plugins-bad-efc6bf88850d0c7cc5679a9ca89e33b0b1c806dc.tar.gz
gst-plugins-bad-efc6bf88850d0c7cc5679a9ca89e33b0b1c806dc.tar.bz2
gst-plugins-bad-efc6bf88850d0c7cc5679a9ca89e33b0b1c806dc.zip
gst/rtpmanager/gstrtpbin.c: Release lock before emitting the request-pt-map signal.
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.
-rw-r--r--ChangeLog8
-rw-r--r--gst/rtpmanager/gstrtpbin.c13
2 files changed, 21 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 61268f39..bee1a39c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-08-05 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ 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.
+
2008-08-02 Sebastian Dröge <sebastian.droege@collabora.co.uk>
* gst/deinterlace2/gstdeinterlace2.c:
diff --git a/gst/rtpmanager/gstrtpbin.c b/gst/rtpmanager/gstrtpbin.c
index 44b2235e..f3e95370 100644
--- a/gst/rtpmanager/gstrtpbin.c
+++ b/gst/rtpmanager/gstrtpbin.c
@@ -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)