From 5ed1752843d931c62d9ab01992a84da480c1b805 Mon Sep 17 00:00:00 2001 From: Sam Zackrisson Date: Thu, 29 Sep 2022 09:43:58 +0200 Subject: [PATCH] APM: Fix benign race in MaybeInitializeCapture() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MaybeInitializeCapture may overwrite the render configuration of a concurrent render reinitialization, leading to a second render reinitialization on the next render processing call. See bug description for details. Tested: Verified bitexactness offline (single-threaded) on a large number of aecdumps. Bug: webrtc:14495 Change-Id: I9b70b454ce1c27859c3414c9c9ec89b7bbe35559 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/277380 Reviewed-by: Per Ã…hgren Commit-Queue: Sam Zackrisson Cr-Commit-Position: refs/heads/main@{#38241} --- modules/audio_processing/audio_processing_impl.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/audio_processing/audio_processing_impl.cc b/modules/audio_processing/audio_processing_impl.cc index 81d96609a4..9405e14fce 100644 --- a/modules/audio_processing/audio_processing_impl.cc +++ b/modules/audio_processing/audio_processing_impl.cc @@ -728,18 +728,20 @@ int AudioProcessingImpl::MaybeInitializeCapture( } if (processing_config.input_stream() != input_config) { - processing_config.input_stream() = input_config; reinitialization_required = true; } if (processing_config.output_stream() != output_config) { - processing_config.output_stream() = output_config; reinitialization_required = true; } if (reinitialization_required) { MutexLock lock_render(&mutex_render_); MutexLock lock_capture(&mutex_capture_); + // Reread the API format since the render format may have changed. + processing_config = formats_.api_format; + processing_config.input_stream() = input_config; + processing_config.output_stream() = output_config; RETURN_ON_ERR(InitializeLocked(processing_config)); } return kNoError;