MT#55283 prevent SSRC deadlock

Closes #2095

Change-Id: I693924eba5c7896f1efa9123cce606db97b0086c
(cherry picked from commit fba001c3b0)
(cherry picked from commit 5273ff5af2)
mr12.5.1
Richard Fuchs 1 week ago
parent 2ac3089599
commit 20922159b4

@ -1446,6 +1446,13 @@ static GString *rtcp_sender_report(struct ssrc_sender_report *ssr,
int i = 0, n = 0;
while (rrs->length) {
struct ssrc_ctx *s = g_queue_pop_head(rrs);
// don't send a receiver report for ourselves. prevents possible deadlock
if (s->parent->h.ssrc == ssrc) {
ssrc_ctx_put(&s);
continue;
}
if (i < 30) {
g_string_set_size(ret, ret->len + sizeof(struct report_block));
struct report_block *rr = (void *) ret->str + ret->len - sizeof(struct report_block);
@ -1557,6 +1564,7 @@ void rtcp_receiver_reports(GQueue *out, struct ssrc_hash *hash, struct call_mono
// call must be locked in R
// if a `ps` is locked, it must be passed as argument
// ssrc_out may be locked
void rtcp_send_report(struct call_media *media, struct ssrc_ctx *ssrc_out,
const struct packet_stream *locked)
{

Loading…
Cancel
Save