From 268c998a32f7cbeb8b6958b4ccf691695bcce19a Mon Sep 17 00:00:00 2001 From: Idar Tollefsen Date: Mon, 17 Oct 2011 23:45:37 +0200 Subject: [PATCH] rtpsession: mt-safe event-push By taking a ref of the sink-pad under lock, it won't dissappear while the push is taking place https://bugzilla.gnome.org/show_bug.cgi?id=667816 --- gst/rtpmanager/gstrtpsession.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/gst/rtpmanager/gstrtpsession.c b/gst/rtpmanager/gstrtpsession.c index 88e76a6c67..78007f5b8b 100644 --- a/gst/rtpmanager/gstrtpsession.c +++ b/gst/rtpmanager/gstrtpsession.c @@ -2212,10 +2212,18 @@ gst_rtp_session_request_key_unit (RTPSession * sess, GstRtpSession *rtpsession = GST_RTP_SESSION (user_data); GstEvent *event; - event = gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM, - gst_structure_new ("GstForceKeyUnit", - "all-headers", G_TYPE_BOOLEAN, all_headers, NULL)); - gst_pad_push_event (rtpsession->send_rtp_sink, event); + GST_RTP_SESSION_LOCK (rtpsession); + if (rtpsession->send_rtp_sink) + send_rtp_sink = gst_object_ref (rtpsession->send_rtp_sink); + GST_RTP_SESSION_UNLOCK (rtpsession); + + if (send_rtp_sink) { + GstEvent *event = gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM, + gst_structure_new ("GstForceKeyUnit", + "all-headers", G_TYPE_BOOLEAN, all_headers, NULL)); + gst_pad_push_event (send_rtp_sink, event); + gst_object_unref (send_rtp_sink); + } } static GstClockTime