
This is the same change as already made for Windows: https://webrtc-codereview.appspot.com/37069004/ * Remove "dead" and "alive" variables. * Remove critical section * Remove implementation of SetNotAlive() * Always set thread name * Add thread checks for correct usage. * Changed AudioDeviceMac to create/start/stop/delete thread objects for playout and recording, inside the respective start and stop method. The reason for this is because the AudioDeviceMac instance is currently being created on one thread and the above Start/Stop methods are being called on a different thread. So, my change makes creation, start/stop, deletion of the thread objects always happen on the same thread. I'm making CurrentThreadId() in rtc_base_approved more visible so that it can be used from there instead of inside webrtc. Down the line we will have more thread concepts in rtc_base_approved, so I put a TODO for myself to move this functionality to there once we do. R=henrika@webrtc.org Review URL: https://webrtc-codereview.appspot.com/40599004 Cr-Commit-Position: refs/heads/master@{#8235} git-svn-id: http://webrtc.googlecode.com/svn/trunk@8235 4adac7df-926f-26a2-2b94-8c16560cd09d
63 lines
1.8 KiB
C++
63 lines
1.8 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.h.
|
|
|
|
#ifndef WEBRTC_BASE_THREAD_CHECKER_IMPL_H_
|
|
#define WEBRTC_BASE_THREAD_CHECKER_IMPL_H_
|
|
|
|
#if defined(WEBRTC_POSIX)
|
|
#include <pthread.h>
|
|
#include <unistd.h>
|
|
#endif
|
|
|
|
#include "webrtc/base/criticalsection.h"
|
|
|
|
namespace rtc {
|
|
|
|
// Used for identifying the current thread. Always an integer value.
|
|
#if defined(WEBRTC_WIN)
|
|
typedef DWORD PlatformThreadId;
|
|
#elif defined(WEBRTC_POSIX)
|
|
typedef pid_t PlatformThreadId;
|
|
#endif
|
|
|
|
// TODO(tommi): This+PlatformThreadId belongs in a common thread related header.
|
|
PlatformThreadId CurrentThreadId();
|
|
|
|
// Real implementation of ThreadChecker, for use in debug mode, or
|
|
// for temporary use in release mode (e.g. to CHECK on a threading issue
|
|
// seen only in the wild).
|
|
//
|
|
// Note: You should almost always use the ThreadChecker class to get the
|
|
// right version for your build configuration.
|
|
class ThreadCheckerImpl {
|
|
public:
|
|
ThreadCheckerImpl();
|
|
~ThreadCheckerImpl();
|
|
|
|
bool CalledOnValidThread() const;
|
|
|
|
// Changes the thread that is checked for in CalledOnValidThread. This may
|
|
// be useful when an object may be created on one thread and then used
|
|
// exclusively on another thread.
|
|
void DetachFromThread();
|
|
|
|
private:
|
|
mutable CriticalSection lock_;
|
|
// This is mutable so that CalledOnValidThread can set it.
|
|
// It's guarded by |lock_|.
|
|
mutable PlatformThreadId valid_thread_;
|
|
};
|
|
|
|
} // namespace rtc
|
|
|
|
#endif // WEBRTC_BASE_THREAD_CHECKER_IMPL_H_
|