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