From 2f2049af23f4f76878053498dd13eb94ffe8d449 Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Wed, 6 Nov 2019 13:28:11 +0100 Subject: [PATCH] Add blocking call in BandwidthStatsTest destructor task_queue_ outlives the BandwidthStatsTest object, but Posted task captures |this|. Blocking call in the destructor is a simple way to avoid that race (should work as long as posted task doesn't call virtual functions from |this|). Bug: webrtc:10933 Change-Id: Id30badb711480af5ee737b96b9224c1a73e730ee Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/158898 Reviewed-by: Ilya Nikolaevskiy Commit-Queue: Danil Chapovalov Cr-Commit-Position: refs/heads/master@{#29707} --- video/end_to_end_tests/bandwidth_tests.cc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/video/end_to_end_tests/bandwidth_tests.cc b/video/end_to_end_tests/bandwidth_tests.cc index c1cf8860da..16b35d68f8 100644 --- a/video/end_to_end_tests/bandwidth_tests.cc +++ b/video/end_to_end_tests/bandwidth_tests.cc @@ -91,6 +91,12 @@ class BandwidthStatsTest : public test::EndToEndTest { send_side_bwe_(send_side_bwe), task_queue_(task_queue) {} + ~BandwidthStatsTest() override { + // Block until all already posted tasks run to avoid races when such task + // accesses |this|. + SendTask(RTC_FROM_HERE, task_queue_, [] {}); + } + void ModifyVideoConfigs( VideoSendStream::Config* send_config, std::vector* receive_configs, @@ -197,7 +203,11 @@ TEST_F(BandwidthEndToEndTest, RembWithSendSideBwe) { retransmission_rate_limiter_(clock_, 1000), task_queue_(task_queue) {} - ~BweObserver() {} + ~BweObserver() override { + // Block until all already posted tasks run to avoid races when such task + // accesses |this|. + SendTask(RTC_FROM_HERE, task_queue_, [] {}); + } std::unique_ptr CreateReceiveTransport( TaskQueueBase* task_queue) override {