LCOV - code coverage report
Current view: top level - src/util - signalinterrupt.h Coverage Total Hit
Test: total_coverage.info Lines: 100.0 % 1 1
Test Date: 2025-01-19 05:08:01 Functions: - 0 0

            Line data    Source code
       1              : // Copyright (c) 2023 The Bitcoin Core developers
       2              : // Distributed under the MIT software license, see the accompanying
       3              : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
       4              : 
       5              : #ifndef BITCOIN_UTIL_SIGNALINTERRUPT_H
       6              : #define BITCOIN_UTIL_SIGNALINTERRUPT_H
       7              : 
       8              : #ifdef WIN32
       9              : #include <condition_variable>
      10              : #include <mutex>
      11              : #else
      12              : #include <util/tokenpipe.h>
      13              : #endif
      14              : 
      15              : #include <atomic>
      16              : #include <cstdlib>
      17              : 
      18              : namespace util {
      19              : /**
      20              :  * Helper class that manages an interrupt flag, and allows a thread or
      21              :  * signal to interrupt another thread.
      22              :  *
      23              :  * This class is safe to be used in a signal handler. If sending an interrupt
      24              :  * from a signal handler is not necessary, the more lightweight \ref
      25              :  * CThreadInterrupt class can be used instead.
      26              :  */
      27              : 
      28         1678 : class SignalInterrupt
      29              : {
      30              : public:
      31              :     SignalInterrupt();
      32              :     explicit operator bool() const;
      33              :     [[nodiscard]] bool operator()();
      34              :     [[nodiscard]] bool reset();
      35              :     [[nodiscard]] bool wait();
      36              : 
      37              : private:
      38              :     std::atomic<bool> m_flag;
      39              : 
      40              : #ifndef WIN32
      41              :     // On UNIX-like operating systems use the self-pipe trick.
      42              :     TokenPipeEnd m_pipe_r;
      43              :     TokenPipeEnd m_pipe_w;
      44              : #else
      45              :     // On windows use a condition variable, since we don't have any signals there
      46              :     std::mutex m_mutex;
      47              :     std::condition_variable m_cv;
      48              : #endif
      49              : };
      50              : } // namespace util
      51              : 
      52              : #endif // BITCOIN_UTIL_SIGNALINTERRUPT_H
        

Generated by: LCOV version 2.0-1