| // Copyright 2018 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/task/sequence_manager/associated_thread_id.h" |
| |
| #include "base/check.h" |
| #include "base/dcheck_is_on.h" |
| |
| namespace base { |
| namespace sequence_manager { |
| namespace internal { |
| |
| AssociatedThreadId::AssociatedThreadId() = default; |
| AssociatedThreadId::~AssociatedThreadId() = default; |
| |
| void AssociatedThreadId::BindToCurrentThread() { |
| #if DCHECK_IS_ON() |
| const auto prev_thread_ref = thread_ref_.load(std::memory_order_relaxed); |
| DCHECK(prev_thread_ref.is_null() || |
| prev_thread_ref == PlatformThread::CurrentRef()); |
| #endif |
| thread_ref_.store(PlatformThread::CurrentRef(), std::memory_order_release); |
| |
| // Rebind the thread and sequence checkers to the current thread/sequence. |
| DETACH_FROM_THREAD(thread_checker); |
| DCHECK_CALLED_ON_VALID_THREAD(thread_checker); |
| |
| DETACH_FROM_SEQUENCE(sequence_checker); |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker); |
| } |
| |
| } // namespace internal |
| } // namespace sequence_manager |
| } // namespace base |