LCOV - code coverage report
Current view: top level - root/contrail/src/contrail-common/io - event_manager.h (source / functions) Hit Total Coverage
Test: OpenSDN C/C++ coverage (all TARGET_SET jobs) Lines: 1 1 100.0 %
Date: 2026-08-03 02:19:58 Functions: 1 1 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
       3             :  */
       4             : 
       5             : #ifndef SRC_IO_EVENT_MANAGER_H_
       6             : #define SRC_IO_EVENT_MANAGER_H_
       7             : 
       8             : #pragma once
       9             : 
      10             : #include <tbb/spin_mutex.h>
      11             : #include <boost/asio/io_service.hpp>
      12             : 
      13             : #include "base/util.h"
      14             : 
      15             : //
      16             : // Wrapper around boost::io_service.
      17             : //
      18             : // The mutex and the related assertions in Run, RunOnce and Poll are used
      19             : // to detect the case where multiple threads are running the EventManager.
      20             : // This typically happens in unit tests that inadvertently call RunOnce or
      21             : // Poll directly or indirectly after having started a ServerThread (which
      22             : // calls Run).
      23             : //
      24             : class EventManager {
      25             : public:
      26             :     EventManager();
      27             : 
      28             :     // Run until shutdown.
      29             :     void Run();
      30             : 
      31             :     // Run at most once.
      32             :     size_t RunOnce();
      33             : 
      34             :     // Run all ready handlers, without blocking.
      35             :     size_t Poll();
      36             : 
      37             :     void Shutdown();
      38             : 
      39             :     // Information whether mutex is already acquired
      40             :     bool IsRunning() const;
      41             : 
      42      437947 :     boost::asio::io_context *io_service() { return &io_service_; }
      43             : 
      44             : private:
      45             :     // Atomic mutex lock operation and changing the running_ flag
      46             :     void Lock();
      47             : 
      48             :     // Atomic mutex unlock operation and changing the running_ flag
      49             :     void Unlock();
      50             : 
      51             :     boost::asio::io_context io_service_;
      52             :     bool shutdown_;
      53             :     tbb::spin_mutex io_mutex_;
      54             :     bool running_;
      55             :     tbb::spin_mutex guard_running_;
      56             : 
      57             :     DISALLOW_COPY_AND_ASSIGN(EventManager);
      58             : };
      59             : 
      60             : #endif  // SRC_IO_EVENT_MANAGER_H_

Generated by: LCOV version 1.14