Files
platform-external-webrtc/webrtc/base/thread_checker_impl.cc
tommi@webrtc.org b5a1252e66 Hack to work around the current issues with rolling WebRTC into chromium.
In order to figure out the issue with the Mac 10.9 debug bot, this patch disables the ThreadChecker class on Mac in debug builds. For diagnostic purposes, it instead prints out when there's a thread mismatch. I'm also adding a DCHECK in case fetching the current thread id ever returns 0.

R=magjed@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/40679004

Cr-Commit-Position: refs/heads/master@{#8269}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8269 4adac7df-926f-26a2-2b94-8c16560cd09d
2015-02-06 15:39:16 +00:00

77 lines
2.2 KiB
C++

/*
* Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
// Borrowed from Chromium's src/base/threading/thread_checker_impl.cc.
#include "webrtc/base/thread_checker_impl.h"
#include "webrtc/base/checks.h"
#if defined(WEBRTC_LINUX)
#include <sys/syscall.h>
#endif
namespace rtc {
PlatformThreadId CurrentThreadId() {
PlatformThreadId ret;
#if defined(WEBRTC_WIN)
ret = GetCurrentThreadId();
#elif defined(WEBRTC_POSIX)
// Pthreads doesn't have the concept of a thread ID, so we have to reach down
// into the kernel.
#if defined(WEBRTC_MAC) || defined(WEBRTC_IOS)
ret = pthread_mach_thread_np(pthread_self());
#elif defined(WEBRTC_LINUX)
ret = syscall(__NR_gettid);
#elif defined(WEBRTC_ANDROID)
ret = gettid();
#else
// Default implementation for nacl and solaris.
ret = reinterpret_cast<pid_t>(pthread_self());
#endif
#endif // defined(WEBRTC_POSIX)
DCHECK(ret);
return ret;
}
ThreadCheckerImpl::ThreadCheckerImpl() : valid_thread_(CurrentThreadId()) {
}
ThreadCheckerImpl::~ThreadCheckerImpl() {
}
bool ThreadCheckerImpl::CalledOnValidThread() const {
const PlatformThreadId current_thread = CurrentThreadId();
CritScope scoped_lock(&lock_);
if (!valid_thread_) // Set if previously detached.
valid_thread_ = current_thread;
#if defined(WEBRTC_MAC) || defined(WEBRTC_IOS)
// TODO(tommi): Remove this hack after we've figured out the roll issue
// with chromium's Mac 10.9 debug bot.
if (valid_thread_ != current_thread) {
// At the moment, this file cannot use logging from either webrtc or
// libjingle. :(
printf("*** WRONG THREAD *** current=%i vs valid=%i\n",
current_thread, valid_thread_);
}
return true; // le sigh.
#else
return valid_thread_ == current_thread;
#endif
}
void ThreadCheckerImpl::DetachFromThread() {
CritScope scoped_lock(&lock_);
valid_thread_ = 0;
}
} // namespace rtc