LCOV - code coverage report
Current view: top level - src/util - signalinterrupt.h Coverage Total Hit
Test: test_bitcoin_coverage.info Lines: 100.0 % 1 1
Test Date: 2026-04-25 06:24:37 Functions: - 0 0

            Line data    Source code
       1              : // Copyright (c) 2023-present 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              : 
      17              : namespace util {
      18              : /**
      19              :  * Helper class that manages an interrupt flag, and allows a thread or
      20              :  * signal to interrupt another thread.
      21              :  *
      22              :  * This class is safe to be used in a signal handler. If sending an interrupt
      23              :  * from a signal handler is not necessary, the more lightweight \ref
      24              :  * CThreadInterrupt class can be used instead.
      25              :  */
      26              : 
      27          682 : class SignalInterrupt
      28              : {
      29              : public:
      30              :     SignalInterrupt();
      31              :     explicit operator bool() const;
      32              :     [[nodiscard]] bool operator()();
      33              :     [[nodiscard]] bool reset();
      34              :     [[nodiscard]] bool wait();
      35              : 
      36              : private:
      37              :     std::atomic<bool> m_flag;
      38              : 
      39              : #ifndef WIN32
      40              :     // On UNIX-like operating systems use the self-pipe trick.
      41              :     TokenPipeEnd m_pipe_r;
      42              :     TokenPipeEnd m_pipe_w;
      43              : #else
      44              :     // On windows use a condition variable, since we don't have any signals there
      45              :     std::mutex m_mutex;
      46              :     std::condition_variable m_cv;
      47              : #endif
      48              : };
      49              : } // namespace util
      50              : 
      51              : #endif // BITCOIN_UTIL_SIGNALINTERRUPT_H
        

Generated by: LCOV version 2.0-1