<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"><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 style="">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 style="">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 style=""><br></div><div style="">Gstreamer Version: 1.16.2 (installed via apt package manager on Ubuntu 20.04.3 LTS)</div><div style=""><br></div></div></div><div><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Best Regards,<br>Eslam Ahmed</div></div></div></div></div>