Fix a runtime issue which causes the program to SIGABRT when it happens.

PR:		212461
Submitted by:	cpm@
Obtained from:	gstreamer upstream
MFH:		2016Q3
This commit is contained in:
Koop Mast 2016-09-15 17:30:23 +00:00
parent 2abc50fe38
commit f5c8e1153b
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=422217
2 changed files with 56 additions and 1 deletions

View File

@ -1,7 +1,7 @@
# Created by: Michael Johnson <ahze@FreeBSD.org>
# $FreeBSD$
PORTREVISION= 0
PORTREVISION= 1
CATEGORIES= multimedia
COMMENT= GStreamer-plugins that need more quality, testing or documentation

View File

@ -0,0 +1,55 @@
From 3aee2039591421f4cc8757353034daf0e011a9ce Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
Date: Thu, 31 Mar 2016 12:20:30 +0300
Subject: adaptivedemux: Handle find_stream_for_pad() without
g_assert_not_reached() if no pad is found
Happens e.g. if a RECONFIGURE event is sent from downstream while we're
switching pads at this very moment. The old pad is gone and the stream has a
new pad.
https://bugzilla.gnome.org/show_bug.cgi?id=764404
diff --git a/gst-libs/gst/adaptivedemux/gstadaptivedemux.c b/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
index dfe7ba7..ba29214 100644
--- gst-libs/gst/adaptivedemux/gstadaptivedemux.c
+++ gst-libs/gst/adaptivedemux/gstadaptivedemux.c
@@ -1092,7 +1092,6 @@ gst_adaptive_demux_find_stream_for_pad (GstAdaptiveDemux * demux, GstPad * pad)
return stream;
}
}
- g_assert_not_reached ();
return NULL;
}
@@ -1241,6 +1240,7 @@ gst_adaptive_demux_src_event (GstPad * pad, GstObject * parent,
gboolean update;
gboolean ret = TRUE;
GstSegment oldsegment;
+ GstAdaptiveDemuxStream *stream = NULL;
GST_INFO_OBJECT (demux, "Received seek event");
@@ -1318,9 +1318,8 @@ gst_adaptive_demux_src_event (GstPad * pad, GstObject * parent,
* use the one that received the event as the 'leading'
* one to do the snap seek.
*/
- if (IS_SNAP_SEEK (flags) && demux_class->stream_seek) {
- GstAdaptiveDemuxStream *stream =
- gst_adaptive_demux_find_stream_for_pad (demux, pad);
+ if (IS_SNAP_SEEK (flags) && demux_class->stream_seek && (stream =
+ gst_adaptive_demux_find_stream_for_pad (demux, pad))) {
GstClockTime ts;
GstSeekFlags stream_seek_flags = flags;
@@ -1359,6 +1358,7 @@ gst_adaptive_demux_src_event (GstPad * pad, GstObject * parent,
GST_DEBUG_OBJECT (demux, "Adapted snap seek to %" GST_PTR_FORMAT,
event);
}
+ stream = NULL;
gst_segment_do_seek (&demux->segment, rate, format, flags, start_type,
start, stop_type, stop, &update);
--
cgit v0.10.2