Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: webrtc/base/thread.cc

Issue 2620303003: Replace ASSERT by RTC_DCHECK in all non-test code. (Closed)
Patch Set: Address final nits. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/base/taskrunner.cc ('k') | webrtc/base/transformadapter.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/base/thread.h" 11 #include "webrtc/base/thread.h"
12 12
13 #ifndef __has_feature 13 #ifndef __has_feature
14 #define __has_feature(x) 0 // Compatibility with non-clang or LLVM compilers. 14 #define __has_feature(x) 0 // Compatibility with non-clang or LLVM compilers.
15 #endif // __has_feature 15 #endif // __has_feature
16 16
17 #if defined(WEBRTC_WIN) 17 #if defined(WEBRTC_WIN)
18 #include <comdef.h> 18 #include <comdef.h>
19 #elif defined(WEBRTC_POSIX) 19 #elif defined(WEBRTC_POSIX)
20 #include <time.h> 20 #include <time.h>
21 #endif 21 #endif
22 22
23 #include "webrtc/base/checks.h"
23 #include "webrtc/base/common.h" 24 #include "webrtc/base/common.h"
24 #include "webrtc/base/logging.h" 25 #include "webrtc/base/logging.h"
25 #include "webrtc/base/nullsocketserver.h" 26 #include "webrtc/base/nullsocketserver.h"
26 #include "webrtc/base/platform_thread.h" 27 #include "webrtc/base/platform_thread.h"
27 #include "webrtc/base/stringutils.h" 28 #include "webrtc/base/stringutils.h"
28 #include "webrtc/base/timeutils.h" 29 #include "webrtc/base/timeutils.h"
29 #include "webrtc/base/trace_event.h" 30 #include "webrtc/base/trace_event.h"
30 31
31 #if !__has_feature(objc_arc) && (defined(WEBRTC_MAC)) 32 #if !__has_feature(objc_arc) && (defined(WEBRTC_MAC))
32 #include "webrtc/base/maccocoathreadhelper.h" 33 #include "webrtc/base/maccocoathreadhelper.h"
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 Thread* thread; 128 Thread* thread;
128 Runnable* runnable; 129 Runnable* runnable;
129 }; 130 };
130 131
131 Thread::ScopedDisallowBlockingCalls::ScopedDisallowBlockingCalls() 132 Thread::ScopedDisallowBlockingCalls::ScopedDisallowBlockingCalls()
132 : thread_(Thread::Current()), 133 : thread_(Thread::Current()),
133 previous_state_(thread_->SetAllowBlockingCalls(false)) { 134 previous_state_(thread_->SetAllowBlockingCalls(false)) {
134 } 135 }
135 136
136 Thread::ScopedDisallowBlockingCalls::~ScopedDisallowBlockingCalls() { 137 Thread::ScopedDisallowBlockingCalls::~ScopedDisallowBlockingCalls() {
137 ASSERT(thread_->IsCurrent()); 138 RTC_DCHECK(thread_->IsCurrent());
138 thread_->SetAllowBlockingCalls(previous_state_); 139 thread_->SetAllowBlockingCalls(previous_state_);
139 } 140 }
140 141
141 Thread::Thread() : Thread(SocketServer::CreateDefault()) {} 142 Thread::Thread() : Thread(SocketServer::CreateDefault()) {}
142 143
143 Thread::Thread(SocketServer* ss) 144 Thread::Thread(SocketServer* ss)
144 : MessageQueue(ss, false), 145 : MessageQueue(ss, false),
145 running_(true, false), 146 running_(true, false),
146 #if defined(WEBRTC_WIN) 147 #if defined(WEBRTC_WIN)
147 thread_(NULL), 148 thread_(NULL),
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 name_ = name; 207 name_ = name;
207 if (obj) { 208 if (obj) {
208 char buf[16]; 209 char buf[16];
209 sprintfn(buf, sizeof(buf), " 0x%p", obj); 210 sprintfn(buf, sizeof(buf), " 0x%p", obj);
210 name_ += buf; 211 name_ += buf;
211 } 212 }
212 return true; 213 return true;
213 } 214 }
214 215
215 bool Thread::Start(Runnable* runnable) { 216 bool Thread::Start(Runnable* runnable) {
216 ASSERT(owned_); 217 RTC_DCHECK(owned_);
217 if (!owned_) return false; 218 if (!owned_) return false;
218 ASSERT(!running()); 219 RTC_DCHECK(!running());
219 if (running()) return false; 220 if (running()) return false;
220 221
221 Restart(); // reset IsQuitting() if the thread is being restarted 222 Restart(); // reset IsQuitting() if the thread is being restarted
222 223
223 // Make sure that ThreadManager is created on the main thread before 224 // Make sure that ThreadManager is created on the main thread before
224 // we start a new thread. 225 // we start a new thread.
225 ThreadManager::Instance(); 226 ThreadManager::Instance();
226 227
227 ThreadInit* init = new ThreadInit; 228 ThreadInit* init = new ThreadInit;
228 init->thread = this; 229 init->thread = this;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 #endif 267 #endif
267 running_.Reset(); 268 running_.Reset();
268 } 269 }
269 270
270 void Thread::SafeWrapCurrent() { 271 void Thread::SafeWrapCurrent() {
271 WrapCurrentWithThreadManager(ThreadManager::Instance(), false); 272 WrapCurrentWithThreadManager(ThreadManager::Instance(), false);
272 } 273 }
273 274
274 void Thread::Join() { 275 void Thread::Join() {
275 if (running()) { 276 if (running()) {
276 ASSERT(!IsCurrent()); 277 RTC_DCHECK(!IsCurrent());
277 if (Current() && !Current()->blocking_calls_allowed_) { 278 if (Current() && !Current()->blocking_calls_allowed_) {
278 LOG(LS_WARNING) << "Waiting for the thread to join, " 279 LOG(LS_WARNING) << "Waiting for the thread to join, "
279 << "but blocking calls have been disallowed"; 280 << "but blocking calls have been disallowed";
280 } 281 }
281 282
282 #if defined(WEBRTC_WIN) 283 #if defined(WEBRTC_WIN)
283 ASSERT(thread_ != NULL); 284 RTC_DCHECK(thread_ != NULL);
284 WaitForSingleObject(thread_, INFINITE); 285 WaitForSingleObject(thread_, INFINITE);
285 CloseHandle(thread_); 286 CloseHandle(thread_);
286 thread_ = NULL; 287 thread_ = NULL;
287 thread_id_ = 0; 288 thread_id_ = 0;
288 #elif defined(WEBRTC_POSIX) 289 #elif defined(WEBRTC_POSIX)
289 void *pv; 290 void *pv;
290 pthread_join(thread_, &pv); 291 pthread_join(thread_, &pv);
291 #endif 292 #endif
292 running_.Reset(); 293 running_.Reset();
293 } 294 }
294 } 295 }
295 296
296 bool Thread::SetAllowBlockingCalls(bool allow) { 297 bool Thread::SetAllowBlockingCalls(bool allow) {
297 ASSERT(IsCurrent()); 298 RTC_DCHECK(IsCurrent());
298 bool previous = blocking_calls_allowed_; 299 bool previous = blocking_calls_allowed_;
299 blocking_calls_allowed_ = allow; 300 blocking_calls_allowed_ = allow;
300 return previous; 301 return previous;
301 } 302 }
302 303
303 // static 304 // static
304 void Thread::AssertBlockingIsAllowedOnCurrentThread() { 305 void Thread::AssertBlockingIsAllowedOnCurrentThread() {
305 #if !defined(NDEBUG) 306 #if !defined(NDEBUG)
306 Thread* current = Thread::Current(); 307 Thread* current = Thread::Current();
307 ASSERT(!current || current->blocking_calls_allowed_); 308 RTC_DCHECK(!current || current->blocking_calls_allowed_);
308 #endif 309 #endif
309 } 310 }
310 311
311 void* Thread::PreRun(void* pv) { 312 void* Thread::PreRun(void* pv) {
312 ThreadInit* init = static_cast<ThreadInit*>(pv); 313 ThreadInit* init = static_cast<ThreadInit*>(pv);
313 ThreadManager::Instance()->SetCurrentThread(init->thread); 314 ThreadManager::Instance()->SetCurrentThread(init->thread);
314 rtc::SetCurrentThreadName(init->thread->name_.c_str()); 315 rtc::SetCurrentThreadName(init->thread->name_.c_str());
315 #if __has_feature(objc_arc) 316 #if __has_feature(objc_arc)
316 @autoreleasepool 317 @autoreleasepool
317 #elif defined(WEBRTC_MAC) 318 #elif defined(WEBRTC_MAC)
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 msg.pdata = pdata; 360 msg.pdata = pdata;
360 if (IsCurrent()) { 361 if (IsCurrent()) {
361 phandler->OnMessage(&msg); 362 phandler->OnMessage(&msg);
362 return; 363 return;
363 } 364 }
364 365
365 AssertBlockingIsAllowedOnCurrentThread(); 366 AssertBlockingIsAllowedOnCurrentThread();
366 367
367 AutoThread thread; 368 AutoThread thread;
368 Thread *current_thread = Thread::Current(); 369 Thread *current_thread = Thread::Current();
369 ASSERT(current_thread != NULL); // AutoThread ensures this 370 RTC_DCHECK(current_thread != NULL); // AutoThread ensures this
370 371
371 bool ready = false; 372 bool ready = false;
372 { 373 {
373 CritScope cs(&crit_); 374 CritScope cs(&crit_);
374 _SendMessage smsg; 375 _SendMessage smsg;
375 smsg.thread = current_thread; 376 smsg.thread = current_thread;
376 smsg.msg = msg; 377 smsg.msg = msg;
377 smsg.ready = &ready; 378 smsg.ready = &ready;
378 sendlist_.push_back(smsg); 379 sendlist_.push_back(smsg);
379 } 380 }
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 AutoThread::~AutoThread() { 549 AutoThread::~AutoThread() {
549 Stop(); 550 Stop();
550 if (ThreadManager::Instance()->CurrentThread() == this) { 551 if (ThreadManager::Instance()->CurrentThread() == this) {
551 ThreadManager::Instance()->SetCurrentThread(NULL); 552 ThreadManager::Instance()->SetCurrentThread(NULL);
552 } 553 }
553 } 554 }
554 555
555 #if defined(WEBRTC_WIN) 556 #if defined(WEBRTC_WIN)
556 void ComThread::Run() { 557 void ComThread::Run() {
557 HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); 558 HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
558 ASSERT(SUCCEEDED(hr)); 559 RTC_DCHECK(SUCCEEDED(hr));
559 if (SUCCEEDED(hr)) { 560 if (SUCCEEDED(hr)) {
560 Thread::Run(); 561 Thread::Run();
561 CoUninitialize(); 562 CoUninitialize();
562 } else { 563 } else {
563 LOG(LS_ERROR) << "CoInitialize failed, hr=" << hr; 564 LOG(LS_ERROR) << "CoInitialize failed, hr=" << hr;
564 } 565 }
565 } 566 }
566 #endif 567 #endif
567 568
568 } // namespace rtc 569 } // namespace rtc
OLDNEW
« no previous file with comments | « webrtc/base/taskrunner.cc ('k') | webrtc/base/transformadapter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698