LCOV - code coverage report
Current view: top level - source/common/signal - fatal_error_handler.h (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 1 1 100.0 %
Date: 2024-01-05 06:35:25 Functions: 1 1 100.0 %

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include <ostream>
       4             : 
       5             : #include "envoy/common/pure.h"
       6             : 
       7             : #include "source/common/signal/fatal_action.h"
       8             : 
       9             : namespace Envoy {
      10             : 
      11             : // A simple class which allows registering functions to be called when Envoy
      12             : // receives one of the fatal signals, documented in signal_action.h.
      13             : class FatalErrorHandlerInterface {
      14             : public:
      15        1498 :   virtual ~FatalErrorHandlerInterface() = default;
      16             :   // Called when Envoy receives a fatal signal. Must be async-signal-safe: in
      17             :   // particular, it can't allocate memory.
      18             :   virtual void onFatalError(std::ostream& os) const PURE;
      19             : 
      20             :   virtual void
      21             :   runFatalActionsOnTrackedObject(const FatalAction::FatalActionPtrList& actions) const PURE;
      22             : };
      23             : 
      24             : namespace FatalErrorHandler {
      25             : /**
      26             :  * Add this handler to the list of functions which will be called if Envoy
      27             :  * receives a fatal signal.
      28             :  */
      29             : void registerFatalErrorHandler(const FatalErrorHandlerInterface& handler);
      30             : 
      31             : /**
      32             :  * Removes this handler from the list of functions which will be called if Envoy
      33             :  * receives a fatal signal.
      34             :  */
      35             : void removeFatalErrorHandler(const FatalErrorHandlerInterface& handler);
      36             : 
      37             : /**
      38             :  * Calls and unregisters the fatal error handlers registered with
      39             :  * registerFatalErrorHandler. This is async-signal-safe and intended to be
      40             :  * called from a fatal signal handler.
      41             :  */
      42             : void callFatalErrorHandlers(std::ostream& os);
      43             : 
      44             : /**
      45             :  * Creates the singleton FatalActionManager if not already created and
      46             :  * registers the specified actions to run on failure.
      47             :  */
      48             : void registerFatalActions(FatalAction::FatalActionPtrList safe_actions,
      49             :                           FatalAction::FatalActionPtrList unsafe_actions,
      50             :                           Thread::ThreadFactory& thread_factory);
      51             : 
      52             : /**
      53             :  * Tries to run all of the safe fatal actions. Only one thread will
      54             :  * be allowed to run the fatal functions.
      55             :  *
      56             :  * Returns a FatalAction::Status which the caller should use to
      57             :  * determine how to proceed.
      58             :  */
      59             : FatalAction::Status runSafeActions();
      60             : 
      61             : /**
      62             :  * Tries to run all of the unsafe fatal actions. Call this only
      63             :  * after calling runSafeActions.
      64             :  *
      65             :  * Returns a FatalAction::Status which the caller should use to determine
      66             :  * how to proceed.
      67             :  */
      68             : FatalAction::Status runUnsafeActions();
      69             : 
      70             : /**
      71             :  *  Clear the Fatal Actions at the end of the server's call to terminate().
      72             :  *  We should clean up the Fatal Action to prevent the memory from leaking.
      73             :  */
      74             : void clearFatalActionsOnTerminate();
      75             : } // namespace FatalErrorHandler
      76             : } // namespace Envoy

Generated by: LCOV version 1.15