MT#55283 prevent SSRC deadlock

Closes #2095

Change-Id: I693924eba5c7896f1efa9123cce606db97b0086c
master
Richard Fuchs 7 days ago
parent bac85c7d68
commit fba001c3b0

@ -1444,6 +1444,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);
@ -1560,6 +1567,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