webrtcbin: Clean up bin elements when datachannel is removed

When a datachannel within a session is removed after proper close,
reference to the error_ignore_bin elements of the datachannel
appsrc/appsink were left in webrtcbin.

This caused the bin-objects to be left and not freed until the whole
webrtc session was terminated. Among other things that includes a thread
from the appsrc.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7791>
This commit is contained in:
Emil Ljungdahl 2024-10-14 11:26:20 +02:00 committed by Backport Bot
parent 206cb5c8f0
commit 9cde2f0927

View file

@ -2585,9 +2585,19 @@ _on_data_channel_ready_state (WebRTCDataChannel * channel,
if (found == FALSE) { if (found == FALSE) {
GST_FIXME_OBJECT (webrtc, "Received close for unknown data channel"); GST_FIXME_OBJECT (webrtc, "Received close for unknown data channel");
} else if (found_pending == FALSE) { } else {
gst_element_set_locked_state (channel->src_bin, TRUE);
gst_element_set_state (channel->src_bin, GST_STATE_NULL);
gst_bin_remove (GST_BIN (webrtc), channel->src_bin);
gst_element_set_locked_state (channel->sink_bin, TRUE);
gst_element_set_state (channel->sink_bin, GST_STATE_NULL);
gst_bin_remove (GST_BIN (webrtc), channel->sink_bin);
if (found_pending == FALSE) {
webrtc->priv->data_channels_closed++; webrtc->priv->data_channels_closed++;
} }
}
DC_UNLOCK (webrtc); DC_UNLOCK (webrtc);
} }
} }