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() {