webrtcbin: fix deadlock when setting up FEC encoder

We bind transceivers' fec_percentage property to the FEC encoder
percentage property, and with the binding bidirectional a deadlock
was introduced by the latest changes from !1762:

We take hold of the transceiver's object lock, then add the binding
and set the property to its initial value on the encoder, which causes
set_property to deadlock in the transceiver when the binding kicks in.

Changing the binding type to DEFAULT (source to target) is enough
to address the deadlock and still serves the original intent.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1967>
This commit is contained in:
Mathieu Duponchelle 2022-03-16 00:05:19 +01:00 committed by GStreamer Marge Bot
parent 5c54cad469
commit 30d028317b

View file

@ -4463,7 +4463,7 @@ _build_fec_encoder (GstWebRTCBin * webrtc, WebRTCTransceiver * trans)
sinkpad = gst_element_get_static_pad (trans->ulpfecenc, "sink");
g_object_bind_property (rtp_trans, "fec-percentage", trans->ulpfecenc,
"percentage", G_BINDING_BIDIRECTIONAL);
"percentage", G_BINDING_DEFAULT);
trans->redenc = gst_element_factory_make ("rtpredenc", NULL);
gst_object_ref_sink (trans->redenc);