Line data Source code
1 : /*
2 : * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
3 : *
4 : * Use of this source code is governed by a BSD-style license
5 : * that can be found in the LICENSE file in the root of the source
6 : * tree. An additional intellectual property rights grant can be found
7 : * in the file PATENTS. All contributing project authors may
8 : * be found in the AUTHORS file in the root of the source tree.
9 : */
10 :
11 : // Borrowed from Chromium's src/base/threading/thread_checker_impl.cc.
12 :
13 : #include "webrtc/base/thread_checker_impl.h"
14 :
15 : #include "webrtc/base/platform_thread.h"
16 :
17 : namespace rtc {
18 :
19 0 : ThreadCheckerImpl::ThreadCheckerImpl() : valid_thread_(CurrentThreadRef()) {
20 0 : }
21 :
22 0 : ThreadCheckerImpl::~ThreadCheckerImpl() {
23 0 : }
24 :
25 0 : bool ThreadCheckerImpl::CalledOnValidThread() const {
26 0 : const PlatformThreadRef current_thread = CurrentThreadRef();
27 0 : CritScope scoped_lock(&lock_);
28 0 : if (!valid_thread_) // Set if previously detached.
29 0 : valid_thread_ = current_thread;
30 0 : return IsThreadRefEqual(valid_thread_, current_thread);
31 : }
32 :
33 0 : void ThreadCheckerImpl::DetachFromThread() {
34 0 : CritScope scoped_lock(&lock_);
35 0 : valid_thread_ = 0;
36 0 : }
37 :
38 : } // namespace rtc
|