ATLAS Offline Software
FPEAuditor.h
Go to the documentation of this file.
1 
3 /*
4  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
5 */
6 
7 // FPEAuditor.h
8 // Header file for class FPEAuditor
9 // Author: S.Binet<binet@cern.ch>
11 #ifndef ATHENASERVICES_FPEAUDITOR_H
12 #define ATHENASERVICES_FPEAUDITOR_H 1
13 
14 // STL includes
15 #include <string>
16 #include <list>
17 #include <utility> // for std::pair
18 #include <atomic>
19 
20 // FrameWork includes
21 #include "Gaudi/Auditor.h"
24 
25 
26 #include <signal.h>
27 #include <fenv.h>
28 
29 // Forward declaration
30 class INamedInterface;
31 
32 
33 class FPEAuditor : public AthCommonMsg<Gaudi::Auditor>
34 {
36  // Public methods:
38  public:
39 
41  FPEAuditor(const std::string& name, ISvcLocator* pSvcLocator);
42 
44  virtual ~FPEAuditor();
45 
47  virtual StatusCode initialize() override;
48 
49  virtual StatusCode finalize() override;
50 
52  virtual void before(const std::string& event, const std::string& name,
53  const EventContext& ctx) override;
54 
55  virtual void after(const std::string& event, const std::string& name,
56  const EventContext& ctx, const StatusCode& sc) override;
57 
59  // Private data:
61  private:
62 
65  void report_fpe(const std::string& step, const std::string& caller);
66 
69  void add_fpe_node();
70 
73  void pop_fpe_node();
74 
75  typedef std::pair<int,int> FpeNode_t;
76  typedef std::list<FpeNode_t> FpeStack_t;
79  static thread_local FpeStack_t s_fpe_stack;
80 
82 
83  std::atomic<unsigned int> m_CountFPEs[FPEAUDITOR_ARRAYSIZE];
84 
85  unsigned int m_NstacktracesOnFPE=0;
86 
87  unsigned int m_Nstacklines=100;
88 
89  void InstallHandler();
90 
91  void UninstallHandler();
92 
93  //fexcept_t m_flagp;
94 
96  fenv_t m_env;
97 
98  std::atomic<int> m_nexceptions;
99 };
100 
101 // I/O operators
103 
105 // Inline methods:
107 
108 #endif //> ATHENASERVICES_FPEAUDITOR_H
FPEAuditor
Definition: FPEAuditor.h:34
FPEAuditor::FpeNode_t
std::pair< int, int > FpeNode_t
Definition: FPEAuditor.h:75
AthCommonMsg.h
Templated class that provides backwards compatibility for legacy MsgService manipulation methods.
FPEAuditor::FPEAUDITOR_INVALID
@ FPEAUDITOR_INVALID
Definition: FPEAuditor.h:81
AthMsgStreamMacros.h
FPEAuditor::add_fpe_node
void add_fpe_node()
add an fpe node
Definition: FPEAuditor.cxx:280
FPEAuditor::m_nexceptions
std::atomic< int > m_nexceptions
Definition: FPEAuditor.h:98
FPEAuditor::after
virtual void after(const std::string &event, const std::string &name, const EventContext &ctx, const StatusCode &sc) override
Definition: FPEAuditor.cxx:179
FPEAuditor::~FPEAuditor
virtual ~FPEAuditor()
Destructor.
Definition: FPEAuditor.cxx:84
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
FPEAuditor::report_fpe
void report_fpe(const std::string &step, const std::string &caller)
report fpes which happened during step 'step' on behalf of 'caller'
Definition: FPEAuditor.cxx:199
event
POOL::TEvent event(POOL::TEvent::kClassAccess)
FPEAuditor::FPEAUDITOR_DIVBYZERO
@ FPEAUDITOR_DIVBYZERO
Definition: FPEAuditor.h:81
FPEAuditor::pop_fpe_node
void pop_fpe_node()
pop an fpe node
Definition: FPEAuditor.cxx:301
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
FPEAuditor::FpeStack_t
std::list< FpeNode_t > FpeStack_t
Definition: FPEAuditor.h:76
FPEAuditor::InstallHandler
void InstallHandler()
Definition: FPEAuditor.cxx:117
FPEAuditor::finalize
virtual StatusCode finalize() override
Definition: FPEAuditor.cxx:101
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
FPEAuditor::FPEAuditor
FPEAuditor(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
Definition: FPEAuditor.cxx:63
FPEAuditor::initialize
virtual StatusCode initialize() override
Gaudi hooks.
Definition: FPEAuditor.cxx:89
FPEAuditor::m_Nstacklines
unsigned int m_Nstacklines
Definition: FPEAuditor.h:87
FPEAuditor::before
virtual void before(const std::string &event, const std::string &name, const EventContext &ctx) override
Auditor hooks.
Definition: FPEAuditor.cxx:163
AthCommonMsg
Definition: AthCommonMsg.h:19
LArCellBinning.step
step
Definition: LArCellBinning.py:158
FPEAuditor::m_CountFPEs
std::atomic< unsigned int > m_CountFPEs[FPEAUDITOR_ARRAYSIZE]
Definition: FPEAuditor.h:83
FPEAuditor::m_env
fenv_t m_env
The FP environment before we initialize.
Definition: FPEAuditor.h:96
FPEAuditor::s_fpe_stack
static thread_local FpeStack_t s_fpe_stack
a stack of FPE exceptions which have been raised
Definition: FPEAuditor.h:79
FPEAuditor::m_NstacktracesOnFPE
unsigned int m_NstacktracesOnFPE
Definition: FPEAuditor.h:85
FPEAuditor::FPEAUDITOR_ARRAYSIZE
@ FPEAUDITOR_ARRAYSIZE
Definition: FPEAuditor.h:81
FPEAuditor::FPEAUDITOR_OVERFLOW
@ FPEAUDITOR_OVERFLOW
Definition: FPEAuditor.h:81
FPEAuditor::UninstallHandler
void UninstallHandler()
Definition: FPEAuditor.cxx:150