From 6e4791fe492de4e6405d0f3b735d2b71576338f4 Mon Sep 17 00:00:00 2001 From: Tommi Date: Wed, 14 Aug 2019 23:05:44 +0200 Subject: [PATCH] Add check for IsCurrent() for SendTask in SingleThreadedTaskQueueForTesting. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "IsCurrent" check seems to have been missing from the class, but may help with tracking down issue 10880. I also replaced the 'infinite' wait in SendTask with a couple of timeouts, arbitrarily chosen 30 seconds for 'abandon wait' and 10 seconds for 'warning' log. Change-Id: Ia40a68658dd007c60771135718511f7e4110c0b0 Bug: webrtc:10880 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/149068 Commit-Queue: Tommi Reviewed-by: Sami Kalliomäki Cr-Commit-Position: refs/heads/master@{#28865} --- test/single_threaded_task_queue.cc | 8 +++++++- test/single_threaded_task_queue.h | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/test/single_threaded_task_queue.cc b/test/single_threaded_task_queue.cc index 965cb47547..3cba11748c 100644 --- a/test/single_threaded_task_queue.cc +++ b/test/single_threaded_task_queue.cc @@ -80,12 +80,14 @@ SingleThreadedTaskQueueForTesting::PostDelayedTask(Task task, } void SingleThreadedTaskQueueForTesting::SendTask(Task task) { + RTC_DCHECK(!IsCurrent()); rtc::Event done; PostTask([&task, &done]() { task(); done.Set(); }); - done.Wait(rtc::Event::kForever); + // Give up after 30 seconds, warn after 10. + RTC_CHECK(done.Wait(30000, 10000)); } bool SingleThreadedTaskQueueForTesting::CancelTask(TaskId task_id) { @@ -99,6 +101,10 @@ bool SingleThreadedTaskQueueForTesting::CancelTask(TaskId task_id) { return false; } +bool SingleThreadedTaskQueueForTesting::IsCurrent() { + return rtc::IsThreadRefEqual(thread_.GetThreadRef(), rtc::CurrentThreadRef()); +} + void SingleThreadedTaskQueueForTesting::Run(void* obj) { static_cast(obj)->RunLoop(); } diff --git a/test/single_threaded_task_queue.h b/test/single_threaded_task_queue.h index 5458dd1297..efd14ce604 100644 --- a/test/single_threaded_task_queue.h +++ b/test/single_threaded_task_queue.h @@ -56,6 +56,9 @@ class SingleThreadedTaskQueueForTesting { // only for invalid task IDs, or for tasks which have already been executed. bool CancelTask(TaskId task_id); + // Returns true iff called on the thread associated with the task queue. + bool IsCurrent(); + private: struct QueuedTask { QueuedTask(TaskId task_id, int64_t earliest_execution_time, Task task);