ATLAS Offline Software
Loading...
Searching...
No Matches
FPEAuditor.h
Go to the documentation of this file.
1
2
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
30class INamedInterface;
31
32
33class 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, const EventContext& ctx);
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
Templated class that provides backwards compatibility for legacy MsgService manipulation methods.
static Double_t sc
std::atomic< int > m_nexceptions
Definition FPEAuditor.h:98
unsigned int m_NstacktracesOnFPE
Definition FPEAuditor.h:85
@ FPEAUDITOR_INVALID
Definition FPEAuditor.h:81
@ FPEAUDITOR_ARRAYSIZE
Definition FPEAuditor.h:81
@ FPEAUDITOR_DIVBYZERO
Definition FPEAuditor.h:81
@ FPEAUDITOR_OVERFLOW
Definition FPEAuditor.h:81
std::atomic< unsigned int > m_CountFPEs[FPEAUDITOR_ARRAYSIZE]
Definition FPEAuditor.h:83
virtual StatusCode finalize() override
virtual void after(const std::string &event, const std::string &name, const EventContext &ctx, const StatusCode &sc) override
void InstallHandler()
std::list< FpeNode_t > FpeStack_t
Definition FPEAuditor.h:76
FPEAuditor(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
static thread_local FpeStack_t s_fpe_stack
a stack of FPE exceptions which have been raised
Definition FPEAuditor.h:79
virtual void before(const std::string &event, const std::string &name, const EventContext &ctx) override
Auditor hooks.
virtual ~FPEAuditor()
Destructor.
void add_fpe_node()
add an fpe node
std::pair< int, int > FpeNode_t
Definition FPEAuditor.h:75
fenv_t m_env
The FP environment before we initialize.
Definition FPEAuditor.h:96
virtual StatusCode initialize() override
Gaudi hooks.
void report_fpe(const std::string &step, const std::string &caller, const EventContext &ctx)
report fpes which happened during step 'step' on behalf of 'caller'
void UninstallHandler()
unsigned int m_Nstacklines
Definition FPEAuditor.h:87
void pop_fpe_node()
pop an fpe node