Make sure that "current" rtc::Thread instances are always current for TaskQueueBase.
This is a necessary part of fulfilling the TaskQueueBase interface. If a thread does not register as the current TQ, yet offers the TQ interface, TQ 'current' checks will not work as expected and code that relies them (TaskQueueBase::Current() and IsCurrent()) will run in unexpected ways. Bug: webrtc:11572 Change-Id: Iab747bc474e74e6ce4f9e914cfd5b0578b19d19c Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/175080 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Commit-Queue: Tommi <tommi@webrtc.org> Cr-Commit-Position: refs/heads/master@{#31254}
This commit is contained in:
@ -1148,6 +1148,18 @@ TEST(ThreadPostDelayedTaskTest, InvokesInDelayOrder) {
|
||||
EXPECT_TRUE(fourth.Wait(0));
|
||||
}
|
||||
|
||||
TEST(ThreadPostDelayedTaskTest, IsCurrentTaskQueue) {
|
||||
auto current_tq = webrtc::TaskQueueBase::Current();
|
||||
{
|
||||
std::unique_ptr<rtc::Thread> thread(rtc::Thread::Create());
|
||||
thread->WrapCurrent();
|
||||
EXPECT_EQ(webrtc::TaskQueueBase::Current(),
|
||||
static_cast<webrtc::TaskQueueBase*>(thread.get()));
|
||||
thread->UnwrapCurrent();
|
||||
}
|
||||
EXPECT_EQ(webrtc::TaskQueueBase::Current(), current_tq);
|
||||
}
|
||||
|
||||
class ThreadFactory : public webrtc::TaskQueueFactory {
|
||||
public:
|
||||
std::unique_ptr<webrtc::TaskQueueBase, webrtc::TaskQueueDeleter>
|
||||
|
||||
Reference in New Issue
Block a user