Deadlock in gst_element_set_state (not from streaming thread)

Alexander Kordecki alex at kordecki.de
Tue Apr 6 11:49:51 UTC 2021


Hi,

I have a similar Problem with many udpsrc.
But I have the deadlock in „bus.timed_pop_filtered“ when waiting for EOS.

I have no good solution yet, I moved this part out of the mutex and now have around 1000 additional hanging threads each day.
So i'm doing regular restarts of this service. I hope it’s going to be fixed soon.

GStreamer 1.14.4

Best regards,
Alexander Kordecki

—
Dipl. Ing.					Beratung und Softwareentwicklung
Alexander Kordecki			für BigData, Datenbanken,
Veitstr. 34a 				Netzwerke und Telekommunikation
13507 Berlin				alex at kordecki.de
Germany					030 / 303 660 660

> Am 06.04.2021 um 13:18 schrieb Yukigaru <yukigaru at gmail.com>:
> 
> I have an application that processes network video steams and is dynamically
> adds/removes them. Scheme is following:
> 
> Left part (added many times): souphttpsrc ! parsebin ! rtph264pay !
> rtph264depay ! capsfilter ! h264parse ! queue ! nvv4l2decoder
> Right part (single instance): nvstreammux -> nvinfer -> nvinfer -> appsink
> 
> The dynamic part is created for each network stream and connects with its
> nvv4l2decoder to the static part.
> 
> The *issue* is that sometimes it *deadlocks* in
> gst_element_set_state(left_part_bin, NULL) upon removing the left part
> (because either the app got external signal to remove the stream or because
> of an error in the stream). The pseudo code of the removal is following:
> 
> void removeSource(...) {
>  deleteMutex.lock();
> 
>  gst_element_set_locked_state(left_part_bin, TRUE);
>  gst_element_set_state(left_part_bin, GST_STATE_NULL); <- deadlocks here
> 
>  auto src_pad = gst_element_get_static_pad(left_part_bin, "src");
>  gst_pad_unlink(src_pad, stream_muxer_sink_pad); // unlink from the right
> part
>  gst_bin_remove(pipeline, left_part_bin);
> 
>  deleteMutex.unlock();
> }
> 
> This removeSource is called from BusCallback function when the "nvstreammux"
> element receives the NVEOS message. I've thoroughly studied forums which say
> that you shouldn't do gst_element_set_state from streaming threads, but it
> seems that I don't do that anyway, because I think bus loop thread is not a
> streaming thread.
> 
> Are you familiar with that issue? Do I do something obviously wrong?
> 
> All errors from gst functions are carefully checked and logged.
> 
> Gstreamer: 1.14.5
> Plugins: Deepstream 5.0 for neural-network inference
> 
> 
> 
> --
> Sent from: http://gstreamer-devel.966125.n4.nabble.com/
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel



More information about the gstreamer-devel mailing list