OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
task_annotations.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
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 ConcurrencyChecker::ConcurrencyChecker(const char *task_ids[], size_t count) {
15  for (size_t i = 0; i < count; i++) {
16  id_set_.insert(scheduler->GetTaskId(task_ids[i]));
17  }
18 }
19 
21 }
22 
24  Task *current = Task::Running();
25  assert(current != NULL);
26  assert(id_set_.count(current->GetTaskId()) > 0);
27 }
28 
30  Task *current = Task::Running();
31  assert(current == NULL);
32 }
33 
35 public:
36  ScopeTask(int task_id) : Task(task_id) {
37  };
38  bool Run() {
39  return false;
40  }
41  std::string Description() const { return "ConcurrencyScope::ScopeTask"; }
43  }
44 };
45 
47  SetRunningTask(task_id);
48 }
49 
50 ConcurrencyScope::ConcurrencyScope(const std::string &name) {
52  SetRunningTask(scheduler->GetTaskId(name));
53 }
54 
57  unit_test_task_.reset(new ScopeTask(task_id));
58  scheduler->SetRunningTask(unit_test_task_.get());
59 }
60 
63  scheduler->ClearRunningTask();
64 }
The TaskScheduler keeps track of what tasks are currently schedulable. When a task is enqueued it is ...
Definition: task.h:178
static Task * Running()
Returns a pointer to the current task the code is executing under.
Definition: task.cc:1562
std::string Description() const
void SetRunningTask(int task_id)
boost::scoped_ptr< ScopeTask > unit_test_task_
int GetTaskId(const std::string &name)
Definition: task.cc:856
static TaskScheduler * GetInstance()
Definition: task.cc:547
bool Run()
Code to execute. Returns true if task is completed. Return false to reschedule the task...
void ClearRunningTask()
Definition: task.cc:1006
void SetRunningTask(Task *)
This function should not be called in production code. It is only for unit testing to control current...
Definition: task.cc:1001
ConcurrencyScope(int task_id)
int GetTaskId() const
Definition: task.h:118
Task is a wrapper over tbb::task to support policies.
Definition: task.h:86