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 49775183 : ConcurrencyChecker::ConcurrencyChecker(const char *task_ids[], size_t count) { 14 49746424 : TaskScheduler *scheduler = TaskScheduler::GetInstance(); 15 119878012 : for (size_t i = 0; i < count; i++) { 16 70090366 : id_set_.insert(scheduler->GetTaskId(task_ids[i])); 17 : } 18 49787646 : } 19 : 20 0 : ConcurrencyChecker::ConcurrencyChecker() { 21 0 : } 22 : 23 49774472 : void ConcurrencyChecker::Check() { 24 49774472 : Task *current = Task::Running(); 25 49646003 : assert(current != NULL); 26 49646003 : assert(id_set_.count(current->task_code_id()) > 0); 27 49618937 : } 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 57157 : ScopeTask(int task_id) : Task(task_id) { 37 57157 : }; 38 0 : bool Run() { 39 0 : return false; 40 : } 41 0 : std::string Description() const { return "ConcurrencyScope::ScopeTask"; } 42 114314 : ~ScopeTask() { 43 114314 : } 44 : }; 45 : 46 0 : ConcurrencyScope::ConcurrencyScope(int task_id) { 47 0 : SetRunningTask(task_id); 48 0 : } 49 : 50 57157 : ConcurrencyScope::ConcurrencyScope(const std::string &name) { 51 57157 : TaskScheduler *scheduler = TaskScheduler::GetInstance(); 52 57157 : SetRunningTask(scheduler->GetTaskId(name)); 53 57157 : } 54 : 55 57157 : void ConcurrencyScope::SetRunningTask(int task_id) { 56 57157 : TaskScheduler *scheduler = TaskScheduler::GetInstance(); 57 57157 : unit_test_task_.reset(new ScopeTask(task_id)); 58 57157 : scheduler->SetRunningTask(unit_test_task_.get()); 59 57157 : } 60 : 61 57157 : ConcurrencyScope::~ConcurrencyScope() { 62 57157 : TaskScheduler *scheduler = TaskScheduler::GetInstance(); 63 57157 : scheduler->ClearRunningTask(); 64 57157 : }