From 4291c8581cd7e36f35824156cf5fae1ea901316e Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Tue, 10 Oct 2023 14:38:52 -0400 Subject: [PATCH] MT#55283 add missing send_timer locks ps->out_lock must be held when sending packets, and the SSRC lock must be held for sending RTCP Change-Id: I19fe85762e330a9b8a03658a828f735db6eb6cb7 (cherry picked from commit 6c7277a84f754f8671f5d31b49fb128c0494c8d4) --- daemon/media_player.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/daemon/media_player.c b/daemon/media_player.c index 4d895a961..a58056834 100644 --- a/daemon/media_player.c +++ b/daemon/media_player.c @@ -221,7 +221,6 @@ static void send_timer_rtcp(struct send_timer *st, struct ssrc_ctx *ssrc_out) { rtcp_send_report(media, ssrc_out); - // XXX missing locking? ssrc_out->next_rtcp = rtpe_now; timeval_add_usec(&ssrc_out->next_rtcp, 5000000 + (ssl_random() % 2000000)); } @@ -294,8 +293,10 @@ static void __send_timer_send_common(struct send_timer *st, struct codec_packet // do we send RTCP? struct ssrc_ctx *ssrc_out = cp->ssrc_out; if (ssrc_out && ssrc_out->next_rtcp.tv_sec) { + mutex_lock(&ssrc_out->parent->h.lock); if (timeval_diff(&ssrc_out->next_rtcp, &rtpe_now) < 0) send_timer_rtcp(st, ssrc_out); + mutex_unlock(&ssrc_out->parent->h.lock); } out: @@ -309,9 +310,11 @@ static void send_timer_send_lock(struct send_timer *st, struct codec_packet *cp) log_info_call(call); rwlock_lock_r(&call->master_lock); + mutex_lock(&st->sink->out_lock); __send_timer_send_common(st, cp); + mutex_unlock(&st->sink->out_lock); rwlock_unlock_r(&call->master_lock); log_info_pop();