
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
60 lines
1.6 KiB
C++
60 lines
1.6 KiB
C++
/*
|
|
* Copyright (c) 2012 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.
|
|
*/
|
|
|
|
#ifndef WEBRTC_SYSTEM_WRAPPERS_SOURCE_THREAD_POSIX_H_
|
|
#define WEBRTC_SYSTEM_WRAPPERS_SOURCE_THREAD_POSIX_H_
|
|
|
|
#include "webrtc/base/scoped_ptr.h"
|
|
#include "webrtc/base/thread_checker.h"
|
|
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
|
|
#include <pthread.h>
|
|
|
|
namespace webrtc {
|
|
|
|
class CriticalSectionWrapper;
|
|
class EventWrapper;
|
|
|
|
int ConvertToSystemPriority(ThreadPriority priority, int min_prio,
|
|
int max_prio);
|
|
|
|
class ThreadPosix : public ThreadWrapper {
|
|
public:
|
|
ThreadPosix(ThreadRunFunction func, ThreadObj obj, ThreadPriority prio,
|
|
const char* thread_name);
|
|
~ThreadPosix() override;
|
|
|
|
// From ThreadWrapper.
|
|
void SetNotAlive() override;
|
|
bool Start(unsigned int& id) override;
|
|
bool Stop() override;
|
|
|
|
private:
|
|
static void* StartThread(void* param);
|
|
|
|
struct InitParams;
|
|
void Run(InitParams* params);
|
|
|
|
rtc::ThreadChecker thread_checker_;
|
|
ThreadRunFunction const run_function_;
|
|
void* const obj_;
|
|
ThreadPriority prio_;
|
|
// TODO(tommi): std::condition_variable?
|
|
const rtc::scoped_ptr<EventWrapper> stop_event_;
|
|
const std::string name_;
|
|
|
|
pid_t thread_id_;
|
|
pthread_t thread_;
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // WEBRTC_SYSTEM_WRAPPERS_SOURCE_THREAD_POSIX_H_
|