Gustav Fahlen e649072584 gstrtspsrc: Do not emit signal 'no-more-pads' too early
Due to race condition it was previously possible that
gst_element_add_pad was not completed for each RTSP stream before
signal 'no-more-pads' was emitted.

Race condition explained:
Lets say two RTSP streams are created: Video and Audio.
1. Callback new_manager_pad is called for the Video stream =>
   stream->added=TRUE.
   all_added=FALSE because both streams are not yet added.
   Call gst_element_add_pad and emit signal 'pad-added' for Video stream.
2. Callback new_manager_pad is called for Audio stream =>
   stream->added=TRUE.
   all_added=TRUE because both streams are added.
   Call gst_element_add_pad and emit signal 'pad-added' for Audio stream.
3. Lets say gst_element_add_pad for the audio stream completes before
   the video stream. Since the audio stream already has all_added==TRUE
   this will result in the signal 'no-more-pads' to be emitted before
   gst_element_add_pad for the video stream is completed.

Solution is to move the logic that sets added=True and checks if all
streams are added to after gst_element_add_pad. This will make sure
signal 'no-more-pads' is not emitted until all code in
gst_element_add_pad is completed for all streams.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8832>
2025-04-14 12:35:06 +00:00
..
2025-04-08 13:10:19 +00:00