MT#55283 prevent SSRC deadlock

Closes #2095

Change-Id: I693924eba5c7896f1efa9123cce606db97b0086c
(cherry picked from commit fba001c3b0)
(cherry picked from commit 796a727f1d)
mr14.0.1
Richard Fuchs 1 week ago
parent c14a329ed5
commit 379483001e

@ -1453,6 +1453,13 @@ static GString *rtcp_sender_report(struct ssrc_sender_report *ssr,
int i = 0, n = 0;
while (rrs->length) {
struct ssrc_entry_call *s = t_queue_pop_head(rrs);
// don't send a receiver report for ourselves. prevents possible deadlock
if (s->h.ssrc == ssrc) {
ssrc_entry_release(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);
@ -1569,6 +1576,7 @@ static void rtcp_receiver_reports(ssrc_q *out, struct ssrc_hash *hash) {
// 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_entry_call *ssrc_out,
const struct packet_stream *locked)
{

Loading…
Cancel
Save