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:
@ -551,6 +551,12 @@ class RTC_LOCKABLE RTC_EXPORT Thread : public webrtc::TaskQueueBase {
|
||||
void InvokeInternal(const Location& posted_from,
|
||||
rtc::FunctionView<void()> functor);
|
||||
|
||||
// Called by the ThreadManager when being set as the current thread.
|
||||
void EnsureIsCurrentTaskQueue();
|
||||
|
||||
// Called by the ThreadManager when being unset as the current thread.
|
||||
void ClearCurrentTaskQueue();
|
||||
|
||||
// Returns a static-lifetime MessageHandler which runs message with
|
||||
// MessageLikeTask payload data.
|
||||
static MessageHandler* GetPostTaskMessageHandler();
|
||||
@ -595,6 +601,8 @@ class RTC_LOCKABLE RTC_EXPORT Thread : public webrtc::TaskQueueBase {
|
||||
|
||||
// Runs webrtc::QueuedTask posted to the Thread.
|
||||
QueuedTaskHandler queued_task_handler_;
|
||||
std::unique_ptr<TaskQueueBase::CurrentTaskQueueSetter>
|
||||
task_queue_registration_;
|
||||
|
||||
friend class ThreadManager;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user