From 0f69ac29de90afcaf9967e7fe447ed7174deb32a Mon Sep 17 00:00:00 2001 From: Alessandro Toppi Date: Mon, 8 Apr 2024 15:46:57 +0200 Subject: [PATCH] Fix potential audiobridge crash when changing room (fixes #3327) --- src/plugins/janus_audiobridge.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/plugins/janus_audiobridge.c b/src/plugins/janus_audiobridge.c index b10bc554fa..2473516687 100644 --- a/src/plugins/janus_audiobridge.c +++ b/src/plugins/janus_audiobridge.c @@ -7276,12 +7276,18 @@ static void *janus_audiobridge_handler(void *data) { } participant->reset = FALSE; /* Destroy the previous encoder/decoder and update the references */ + while(!g_atomic_int_compare_and_exchange(&participant->encoding, 0, 1)) + g_usleep(5000); if(participant->encoder) opus_encoder_destroy(participant->encoder); participant->encoder = new_encoder; + g_atomic_int_set(&participant->encoding, 0); + while(!g_atomic_int_compare_and_exchange(&participant->decoding, 0, 1)) + g_usleep(5000); if(participant->decoder) opus_decoder_destroy(participant->decoder); participant->decoder = new_decoder; + g_atomic_int_set(&participant->decoding, 0); } if(quality) opus_encoder_ctl(participant->encoder, OPUS_SET_COMPLEXITY(participant->opus_complexity));