From b5a1252e66422c723f062e0af3b95cbca4a7feda Mon Sep 17 00:00:00 2001 From: "tommi@webrtc.org" Date: Fri, 6 Feb 2015 15:39:05 +0000 Subject: [PATCH] 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 --- webrtc/base/thread_checker_impl.cc | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/webrtc/base/thread_checker_impl.cc b/webrtc/base/thread_checker_impl.cc index 0b419d9505..9ff2a97c1e 100644 --- a/webrtc/base/thread_checker_impl.cc +++ b/webrtc/base/thread_checker_impl.cc @@ -21,22 +21,25 @@ namespace rtc { PlatformThreadId CurrentThreadId() { + PlatformThreadId ret; #if defined(WEBRTC_WIN) - return GetCurrentThreadId(); + 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) - return pthread_mach_thread_np(pthread_self()); + ret = pthread_mach_thread_np(pthread_self()); #elif defined(WEBRTC_LINUX) - return syscall(__NR_gettid); + ret = syscall(__NR_gettid); #elif defined(WEBRTC_ANDROID) - return gettid(); + ret = gettid(); #else // Default implementation for nacl and solaris. - return reinterpret_cast(pthread_self()); + ret = reinterpret_cast(pthread_self()); #endif #endif // defined(WEBRTC_POSIX) + DCHECK(ret); + return ret; } ThreadCheckerImpl::ThreadCheckerImpl() : valid_thread_(CurrentThreadId()) { @@ -46,11 +49,23 @@ ThreadCheckerImpl::~ThreadCheckerImpl() { } bool ThreadCheckerImpl::CalledOnValidThread() const { - CritScope scoped_lock(&lock_); 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() {