Chromium Code Reviews| Index: base/threading/simple_thread.cc |
| diff --git a/base/threading/simple_thread.cc b/base/threading/simple_thread.cc |
| index 6c64a17d6ab2fea1ec792715ad4697adcc21bd94..0f6f08c30dbc7f7a5b7d4630898a8cb5cd89ac37 100644 |
| --- a/base/threading/simple_thread.cc |
| +++ b/base/threading/simple_thread.cc |
| @@ -12,39 +12,29 @@ |
| namespace base { |
| SimpleThread::SimpleThread(const std::string& name_prefix) |
| - : name_prefix_(name_prefix), |
| - name_(name_prefix), |
| - thread_(), |
| - event_(WaitableEvent::ResetPolicy::MANUAL, |
| - WaitableEvent::InitialState::NOT_SIGNALED), |
| - tid_(0), |
| - joined_(false) {} |
| + : SimpleThread(name_prefix, Options()) {} |
| SimpleThread::SimpleThread(const std::string& name_prefix, |
| const Options& options) |
| : name_prefix_(name_prefix), |
| name_(name_prefix), |
| options_(options), |
| - thread_(), |
| event_(WaitableEvent::ResetPolicy::MANUAL, |
| - WaitableEvent::InitialState::NOT_SIGNALED), |
| - tid_(0), |
| - joined_(false) {} |
| + WaitableEvent::InitialState::NOT_SIGNALED) {} |
| SimpleThread::~SimpleThread() { |
| DCHECK(HasBeenStarted()) << "SimpleThread was never started."; |
| - DCHECK(HasBeenJoined()) << "SimpleThread destroyed without being Join()ed."; |
| + DCHECK(thread_.is_null()) << "Joinable SimpleThread destroyed without being " |
| + << "Join()ed."; |
| } |
| void SimpleThread::Start() { |
| DCHECK(!HasBeenStarted()) << "Tried to Start a thread multiple times."; |
| - bool success; |
| - if (options_.priority() == ThreadPriority::NORMAL) { |
| - success = PlatformThread::Create(options_.stack_size(), this, &thread_); |
| - } else { |
| - success = PlatformThread::CreateWithPriority(options_.stack_size(), this, |
| - &thread_, options_.priority()); |
| - } |
| + bool success = options_.joinable |
| + ? PlatformThread::CreateWithPriority(options_.stack_size, this, |
| + &thread_, options_.priority) |
| + : PlatformThread::CreateNonJoinableWithPriority( |
| + options_.stack_size, this, options_.priority); |
| DCHECK(success); |
| base::ThreadRestrictions::ScopedAllowWait allow_wait; |
| event_.Wait(); // Wait for the thread to complete initialization. |
| @@ -52,8 +42,10 @@ void SimpleThread::Start() { |
| void SimpleThread::Join() { |
| DCHECK(HasBeenStarted()) << "Tried to Join a never-started thread."; |
| + DCHECK(!thread_.is_null()) << "A non-joinable thread can't be joined."; |
|
Lei Zhang
2016/08/03 23:24:11
Put this before or after the HasBeen twins?
gab
2016/08/04 14:35:00
Done.
|
| DCHECK(!HasBeenJoined()) << "Tried to Join a thread multiple times."; |
| PlatformThread::Join(thread_); |
| + thread_ = PlatformThreadHandle(); |
| joined_ = true; |
| } |