<div dir="ltr"><div dir="ltr"><div>Hello again,</div><div><br></div><div>I managed to produce this outside of my application. here's the code: <a href="https://pastebin.com/cnvWBV0a" target="_blank">https://pastebin.com/cnvWBV0a</a></div><div><br></div><div>I also discovered some ways to workaround the issue and prevent the deadlock from happening:</div><div><ul><li>Using a live source with rtspsrc instead of filesrc</li><li>Remove the tee and the queue and link `filesrc ! decodebin ! sink` directly</li></ul></div><div>The code produces .dot graph files for the pipeline (before/after sending the eos) so you might wanna set the environment variable <span style="white-space:pre-wrap">GST_DEBUG_DUMP_DOT_DIR to a valid path where the .dot files are to be dumped.</span></div><div dir="ltr"><br></div><div>Can anyone confirm this? Is it a bug so I can report it?</div><br clear="all"><div><div dir="ltr" data-smartmail="gmail_signature"><div dir="ltr">Best Regards,<br>Eslam Ahmed</div></div></div><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Nov 10, 2021 at 10:24 AM Eslam Ahmed <<a href="mailto:eslam.ahmed@avidbeam.com" target="_blank">eslam.ahmed@avidbeam.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hello,<div><br></div><div>Consider the following pipeline:</div><div><br></div><div>filesrc ! typefind ! decodebin ! fakesink</div><div><br></div><div>My main goal is to inspect the buffers for a while then finalize the pipeline so I installed a probe of type <span style="color:rgb(102,163,52);font-style:italic">GST_PAD_PROBE_TYPE_BUFFER </span>on the fakesink's sink pad, which after inspecting the buffers for a while emits an EOS signal down using the pipeline itself then removes the probe. Problem is the pipeline gets deadlocked on sending this event. Here's gdb backtrace:</div><div><div style="color:rgb(212,212,212);background-color:rgb(30,30,30);line-height:19px;white-space:pre-wrap"><div style="font-size:14px;font-family:"Droid Sans Mono","monospace",monospace,"Droid Sans Fallback"">```</div><div style="font-size:14px;font-family:"Droid Sans Mono","monospace",monospace,"Droid Sans Fallback"">#0  __lll_lock_wait (futex=futex@entry=0x555556192e10, private=0) <span style="color:rgb(86,156,214)">at</span> lowlevellock.c:52</div><div style="font-size:14px;font-family:"Droid Sans Mono","monospace",monospace,"Droid Sans Fallback"">#1  <span style="color:rgb(181,206,168)">0x00007ffff732a131</span> in __GI___pthread_mutex_lock (mutex=0x555556192e10) <span style="color:rgb(86,156,214)">at</span> ../nptl/pthread_mutex_lock.c:115</div><div style="font-size:14px;font-family:"Droid Sans Mono","monospace",monospace,"Droid Sans Fallback"">#2  <span style="color:rgb(181,206,168)">0x00007ffff6c4e1dd</span> in  () <span style="color:rgb(86,156,214)">at</span> /lib/x86_64-linux-gnu/libgstbase-1.0.so.0</div><div style="font-size:14px;font-family:"Droid Sans Mono","monospace",monospace,"Droid Sans Fallback"">#3  <span style="color:rgb(181,206,168)">0x00007ffff7bd74a2</span> in gst_element_send_event () <span style="color:rgb(86,156,214)">at</span> /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0</div><div style="font-size:14px;font-family:"Droid Sans Mono","monospace",monospace,"Droid Sans Fallback"">#4  <span style="color:rgb(181,206,168)">0x00007ffff7bb452d</span> in  () <span style="color:rgb(86,156,214)">at</span> /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0</div><div style="font-size:14px;font-family:"Droid Sans Mono","monospace",monospace,"Droid Sans Fallback"">#5  <span style="color:rgb(181,206,168)">0x00007ffff7bd74a2</span> in gst_element_send_event () <span style="color:rgb(86,156,214)">at</span> /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0</div><div style="font-size:14px;font-family:"Droid Sans Mono","monospace",monospace,"Droid Sans Fallback"">#6  <span style="color:rgb(181,206,168)">0x00007ffff7bb452d</span> in  () <span style="color:rgb(86,156,214)">at</span> /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0</div><div style="font-size:14px;font-family:"Droid Sans Mono","monospace",monospace,"Droid Sans Fallback"">#7  <span style="color:rgb(181,206,168)">0x00007ffff7bd74a2</span> in gst_element_send_event () <span style="color:rgb(86,156,214)">at</span> /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0</div><div style="font-size:14px;font-family:"Droid Sans Mono","monospace",monospace,"Droid Sans Fallback"">#8  <span style="color:rgb(181,206,168)">0x00007ffff75219aa</span> in pipeline_manager::send_eos() (this=0x7fffffffd530)</div><div style="font-size:14px;font-family:"Droid Sans Mono","monospace",monospace,"Droid Sans Fallback"">#9  <span style="color:rgb(181,206,168)">0x00005555556937c5</span> in (anonymous namespace)::cb_gather_media_spec(GstPad*, GstPadProbeInfo*, gpointer) (pad=<span style="color:rgb(181,206,168)">0x5555560c7120</span> [GstPad|sink], info=0x7ffff393d650, user_data=0x7fffffffd4d0)</div><div style="font-size:14px;font-family:"Droid Sans Mono","monospace",monospace,"Droid Sans Fallback"">```</div><font face="Droid Sans Mono, monospace, monospace, Droid Sans Fallback" style="font-size:14px"><br></font><div>The implementation of <span style="font-family:"Droid Sans Mono","monospace",monospace,"Droid Sans Fallback";font-size:14px;background-color:rgb(30,30,30);color:rgb(212,212,212)">pipeline_manager::send_eos()</span><span style="background-color:rgb(30,30,30);color:rgb(212,212,212)"> is fairly straightforward just calling `gst_element_send_event(pipeline_.get(), gst_event_new_eos());`</span></div><div>Surprisingly, I don't get the deadlock when using a live source (rtspsrc instead of the filesrc)<br>Is it wrong to send the in-band downstream EOS event from a pad probe callback? Am I missing something here?<br></div><div><br></div><div>Gstreamer Version: 1.16.2 (installed via apt package manager on Ubuntu 20.04.3 LTS)</div><div><br></div></div></div><div><div><div dir="ltr"><div dir="ltr">Best Regards,<br>Eslam Ahmed</div></div></div></div></div>
</blockquote></div></div>