LCOV - code coverage report
Current view: top level - root/contrail/src/contrail-common/base - task_trigger.cc (source / functions) Hit Total Coverage
Test: OpenSDN C/C++ coverage (all TARGET_SET jobs) Lines: 32 33 97.0 %
Date: 2026-11-09 02:10:49 Functions: 6 7 85.7 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
       3             :  * Copyright Contributors to the OpenSDN project
       4             :  */
       5             : #include <iostream>
       6             : #include "base/task_trigger.h"
       7             : 
       8             : #include "base/task.h"
       9             : 
      10             : class TaskTrigger::WorkerTask : public Task {
      11             : public:
      12     1671139 :     explicit WorkerTask(TaskTrigger *parent)
      13     1671139 :         : Task(parent->task_id_, parent->task_instance_), parent_(parent) {
      14     1671119 :     }
      15     1867667 :     bool Run() {
      16     1867667 :         if (parent_->disabled()) {
      17         415 :             parent_->Reset();
      18         415 :             return true;
      19             :         }
      20     1867232 :         if (parent_->deferred()) {
      21      194767 :             return false;
      22             :         }
      23     1672448 :         bool done = (parent_->func_)();
      24     1672709 :         if (done) {
      25     1670597 :             parent_->Reset();
      26             :         }
      27     1672834 :         return done;
      28             :     }
      29           0 :     std::string Description() const { return "TaskTrigger::WorkerTask"; }
      30             : 
      31             : private:
      32             :     TaskTrigger *parent_;
      33             : };
      34             : 
      35     1765599 : TaskTrigger::TaskTrigger(const FunctionPtr& func, int task_id, int task_instance)
      36     1765599 :     : func_(func), task_id_(task_id), task_instance_(task_instance) {
      37     1765298 :     trigger_ = false;
      38     1765732 :     disabled_ = false;
      39     1765723 :     deferred_ = false;
      40     1765655 : }
      41             : 
      42     1765727 : TaskTrigger::~TaskTrigger() {
      43     1765727 :     assert(!trigger_);
      44     1765727 : }
      45             : 
      46     3910814 : void TaskTrigger::Set() {
      47     3910814 :     bool current = trigger_.exchange(true);
      48     3910834 :     if (!current) {
      49     1671146 :         WorkerTask *task = new WorkerTask(this);
      50     1671116 :         TaskScheduler *scheduler = TaskScheduler::GetInstance();
      51     1671111 :         scheduler->Enqueue(task);
      52             :     }
      53     3910838 : }
      54             : 
      55     2699059 : void TaskTrigger::Reset() {
      56     2699059 :     trigger_ = false;
      57     2699192 : }

Generated by: LCOV version 1.14