Line data Source code
1 : /* 2 : * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved. 3 : */ 4 : 5 : #include "base/task_annotations.h" 6 : 7 : #include <strings.h> 8 : #include "base/task.h" 9 : 10 : bool ConcurrencyChecker::enable_ = getenv("CONCURRENCY_CHECK_ENABLE") != NULL && 11 : !strcasecmp(getenv("CONCURRENCY_CHECK_ENABLE"), "true"); 12 : 13 49701035 : ConcurrencyChecker::ConcurrencyChecker(const char *task_ids[], size_t count) { 14 49664752 : TaskScheduler *scheduler = TaskScheduler::GetInstance(); 15 120036575 : for (size_t i = 0; i < count; i++) { 16 70323305 : id_set_.insert(scheduler->GetTaskId(task_ids[i])); 17 : } 18 49713270 : } 19 : 20 0 : ConcurrencyChecker::ConcurrencyChecker() { 21 0 : } 22 : 23 49697700 : void ConcurrencyChecker::Check() { 24 49697700 : Task *current = Task::Running(); 25 49550485 : assert(current != NULL); 26 49550485 : assert(id_set_.count(current->task_code_id()) > 0); 27 49513214 : } 28 : 29 0 : void ConcurrencyChecker::CheckIfMainThr() { 30 0 : Task *current = Task::Running(); 31 0 : assert(current == NULL); 32 0 : } 33 : 34 : class ConcurrencyScope::ScopeTask : public Task { 35 : public: 36 57159 : ScopeTask(int task_id) : Task(task_id) { 37 57159 : }; 38 0 : bool Run() { 39 0 : return false; 40 : } 41 0 : std::string Description() const { return "ConcurrencyScope::ScopeTask"; } 42 114318 : ~ScopeTask() { 43 114318 : } 44 : }; 45 : 46 0 : ConcurrencyScope::ConcurrencyScope(int task_id) { 47 0 : SetRunningTask(task_id); 48 0 : } 49 : 50 57159 : ConcurrencyScope::ConcurrencyScope(const std::string &name) { 51 57159 : TaskScheduler *scheduler = TaskScheduler::GetInstance(); 52 57159 : SetRunningTask(scheduler->GetTaskId(name)); 53 57159 : } 54 : 55 57159 : void ConcurrencyScope::SetRunningTask(int task_id) { 56 57159 : TaskScheduler *scheduler = TaskScheduler::GetInstance(); 57 57159 : unit_test_task_.reset(new ScopeTask(task_id)); 58 57159 : scheduler->SetRunningTask(unit_test_task_.get()); 59 57159 : } 60 : 61 57159 : ConcurrencyScope::~ConcurrencyScope() { 62 57159 : TaskScheduler *scheduler = TaskScheduler::GetInstance(); 63 57159 : scheduler->ClearRunningTask(); 64 57159 : }