<div dir="ltr">This is on gstreamer 1.16.2. And it's difficult to describe, so please be patient. <div><br></div><div>I have an application server with a rest api. The rest api is used to build N number of dynamic pipelines. Sometimes these pipelines have branches that use webrtcbin, and the rest api is the signaling layer. </div><div><br></div><div>When doing sdp negotiation, the remote peer provides an offer. Depending on what's in the offer, I connect a vp8 and/or opus sources to webrtcbin *before* setting the remote description and generating the answer. I was told here that I would need for webrtcbin to create the sink pads, and to watch for caps to become available on those sink pads before I could negotiate sdp.</div><div><br></div><div>So I've added signals/waits to do just that. I add a signal handler for pad-added, and if it's a sink pad, add a signal handler for notify::caps (actually this is all rust, so using the gstreamer-rs api).</div><div><br></div><div>When the sdp offer is posted to the api layer, I link the vp8 and/or opus sources. I then wait for a cvar to be signalled. The cvar is signalled in the notify::caps signal handler. I've got a reasonable wait timeout of 500ms, but it doesn't really matter.</div><div><br></div><div>When there is no thread contention, the cvar wait never times out. It works as expected. Caps are set on the sink pad, the cvar is signalled, and the waiting threads are unblocked. *However*, when there is lots of activity (i.e., lots of pipelines, and lots of threads), the caps never arrive on the sink pad. </div><div><br></div><div>And that doesn't make sense to me. The input sources fed into webrtcbin are all connected via an application thread. The application thread then waits. I was sure that the sink pad caps negotiation would occur on a gstreamer managed thread, and suspending the application thread would have zero effect. In my load test logs, I've seen the caps arrive 10, 20, 30 seconds later, usually when I've tried to free tear down the pipeline. </div><div><br></div><div>So what is the best way to block the application thread to wait for caps to arrive on the sink pad while at the same time forcing webrtcbin to push the caps down?</div></div>