From: Stefan Sauer Date: Tue, 29 Nov 2011 09:40:40 +0000 (+0100) Subject: adder: fix deadly setcaps recursion X-Git-Tag: 1.19.3~511^2~7094 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9debd13665260ba5afac3bcd571679e0a8ebdf0a;p=platform%2Fupstream%2Fgstreamer.git adder: fix deadly setcaps recursion Use a flag to avoid calling setcaps until our stack is exhausted. I don't see how this would be useful. --- diff --git a/gst/adder/gstadder.c b/gst/adder/gstadder.c index c2bdff2..4070f0d 100644 --- a/gst/adder/gstadder.c +++ b/gst/adder/gstadder.c @@ -263,6 +263,11 @@ gst_adder_setcaps (GstAdder * adder, GstPad * pad, GstCaps * caps) IterData idata; gboolean done; + /* this get called recursively due to gst_iterator_foreach calling + * gst_pad_set_caps() */ + if (adder->in_setcaps) + return TRUE; + GST_LOG_OBJECT (adder, "setting caps pad %p,%s to %" GST_PTR_FORMAT, pad, GST_PAD_NAME (pad), caps); @@ -273,6 +278,7 @@ gst_adder_setcaps (GstAdder * adder, GstPad * pad, GstCaps * caps) idata.caps = caps; idata.pad = pad; + adder->in_setcaps = TRUE; done = FALSE; while (!done) { ires = gst_iterator_foreach (it, (GstIteratorForeachFunction) setcapsfunc, @@ -287,6 +293,10 @@ gst_adder_setcaps (GstAdder * adder, GstPad * pad, GstCaps * caps) break; } } + adder->in_setcaps = FALSE; + + GST_LOG_OBJECT (adder, "handle caps changes on pad %p,%s to %" GST_PTR_FORMAT, + pad, GST_PAD_NAME (pad), caps); if (!gst_audio_info_from_caps (&info, caps)) goto invalid_format; diff --git a/gst/adder/gstadder.h b/gst/adder/gstadder.h index 5a50c03..126bb2f 100644 --- a/gst/adder/gstadder.h +++ b/gst/adder/gstadder.h @@ -77,6 +77,8 @@ struct _GstAdder { /* Pending inline events */ GList *pending_events; + + gboolean in_setcaps; }; struct _GstAdderClass {