StatsEndToEndTest.TestReceivedRtpPacketStats: Fix flaky test.
Add PendingTaskSafetyFlag to avoid use after free. Bug: webrtc:13379 Change-Id: Ia5e97d3798d2d25fb785944fd18de6775e1d65a9 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/237501 Reviewed-by: Niels Moller <nisse@webrtc.org> Reviewed-by: Björn Terelius <terelius@webrtc.org> Commit-Queue: Åsa Persson <asapersson@webrtc.org> Cr-Commit-Position: refs/heads/main@{#35335}
This commit is contained in:
parent
c694270149
commit
c86e1c2e70
@ -411,27 +411,29 @@ TEST_F(StatsEndToEndTest, TimingFramesAreReported) {
|
|||||||
|
|
||||||
TEST_F(StatsEndToEndTest, TestReceivedRtpPacketStats) {
|
TEST_F(StatsEndToEndTest, TestReceivedRtpPacketStats) {
|
||||||
static const size_t kNumRtpPacketsToSend = 5;
|
static const size_t kNumRtpPacketsToSend = 5;
|
||||||
class ReceivedRtpStatsObserver : public test::EndToEndTest,
|
class ReceivedRtpStatsObserver : public test::EndToEndTest {
|
||||||
public QueuedTask {
|
|
||||||
public:
|
public:
|
||||||
ReceivedRtpStatsObserver()
|
explicit ReceivedRtpStatsObserver(TaskQueueBase* task_queue)
|
||||||
: EndToEndTest(kDefaultTimeoutMs),
|
: EndToEndTest(kDefaultTimeoutMs), task_queue_(task_queue) {}
|
||||||
receive_stream_(nullptr),
|
|
||||||
sent_rtp_(0) {}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void OnVideoStreamsCreated(
|
void OnVideoStreamsCreated(
|
||||||
VideoSendStream* send_stream,
|
VideoSendStream* send_stream,
|
||||||
const std::vector<VideoReceiveStream*>& receive_streams) override {
|
const std::vector<VideoReceiveStream*>& receive_streams) override {
|
||||||
receive_stream_ = receive_streams[0];
|
receive_stream_ = receive_streams[0];
|
||||||
task_queue_ = TaskQueueBase::Current();
|
|
||||||
EXPECT_TRUE(task_queue_ != nullptr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OnStreamsStopped() override { task_safety_flag_->SetNotAlive(); }
|
||||||
|
|
||||||
Action OnSendRtp(const uint8_t* packet, size_t length) override {
|
Action OnSendRtp(const uint8_t* packet, size_t length) override {
|
||||||
if (sent_rtp_ >= kNumRtpPacketsToSend) {
|
if (sent_rtp_ >= kNumRtpPacketsToSend) {
|
||||||
// Need to check the stats on the correct thread.
|
// Need to check the stats on the correct thread.
|
||||||
task_queue_->PostTask(std::unique_ptr<QueuedTask>(this));
|
task_queue_->PostTask(ToQueuedTask(task_safety_flag_, [this]() {
|
||||||
|
VideoReceiveStream::Stats stats = receive_stream_->GetStats();
|
||||||
|
if (kNumRtpPacketsToSend == stats.rtp_stats.packet_counter.packets) {
|
||||||
|
observation_complete_.Set();
|
||||||
|
}
|
||||||
|
}));
|
||||||
return DROP_PACKET;
|
return DROP_PACKET;
|
||||||
}
|
}
|
||||||
++sent_rtp_;
|
++sent_rtp_;
|
||||||
@ -443,18 +445,12 @@ TEST_F(StatsEndToEndTest, TestReceivedRtpPacketStats) {
|
|||||||
<< "Timed out while verifying number of received RTP packets.";
|
<< "Timed out while verifying number of received RTP packets.";
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Run() override {
|
VideoReceiveStream* receive_stream_ = nullptr;
|
||||||
VideoReceiveStream::Stats stats = receive_stream_->GetStats();
|
uint32_t sent_rtp_ = 0;
|
||||||
if (kNumRtpPacketsToSend == stats.rtp_stats.packet_counter.packets) {
|
TaskQueueBase* const task_queue_;
|
||||||
observation_complete_.Set();
|
rtc::scoped_refptr<PendingTaskSafetyFlag> task_safety_flag_ =
|
||||||
}
|
PendingTaskSafetyFlag::CreateDetached();
|
||||||
return false;
|
} test(task_queue());
|
||||||
}
|
|
||||||
|
|
||||||
VideoReceiveStream* receive_stream_;
|
|
||||||
uint32_t sent_rtp_;
|
|
||||||
TaskQueueBase* task_queue_ = nullptr;
|
|
||||||
} test;
|
|
||||||
|
|
||||||
RunBaseTest(&test);
|
RunBaseTest(&test);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user