ATLAS Offline Software
Loading...
Searching...
No Matches
AthROOTErrorHandlerSvc.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7#include "TROOT.h"
8
9namespace Handler {
11 ErrorHandlerFunc_t oldHandler;
12
13 void ErrorHandler ATLAS_NOT_THREAD_SAFE ( Int_t level, Bool_t abort, const char* location, const char* message ) {
14 if (svc) { // should always be set by now
15 if(svc->m_catchLevel <= level) {
16 std::ostringstream oss;
17 oss << "AthROOTErrorHandlerSvc detected ROOT message >= CatchLevel "
18 << svc->m_catchLevel << " (" << level << "): " << location << " : " << message;
19 throw std::runtime_error(oss.str());
20 }
21 const auto itr = svc->m_throwSources.find(location);
22 if(itr!=svc->m_throwSources.end() && itr->second <= level) {
23 std::ostringstream oss;
24 oss << "AthROOTErrorHandlerSvc detected ROOT message from Throw Sources : "
25 << location << " (level=" << level << ") : " << message;
26 throw std::runtime_error(oss.str());
27 }
28 }
29 //now pass on to old handler
30 if(oldHandler) oldHandler( level, abort, location, message );
31 }
32
33}
34
35
36AthROOTErrorHandlerSvc::AthROOTErrorHandlerSvc(const std::string& name, ISvcLocator *svcLoc) :
37 AthService(name, svcLoc) {
38}
39
42
43
44StatusCode AthROOTErrorHandlerSvc::initialize ATLAS_NOT_THREAD_SAFE() {
45
46 ATH_MSG_DEBUG("Replacing ROOT ErrorHandler");
47 ErrorHandlerFunc_t h = ::SetErrorHandler( Handler::ErrorHandler );
48 Handler::svc = this;
49
50 // if statement protects against double-initialize causing infinite loop in ErrorHandler
51 if (h != Handler::ErrorHandler) {
53 }
54 return StatusCode::SUCCESS;
55}
56
57StatusCode AthROOTErrorHandlerSvc::finalize ATLAS_NOT_THREAD_SAFE() {
58
59 ATH_MSG_DEBUG("Restoring old ROOT ErrorHandler");
60 Handler::svc = nullptr;
61 if (Handler::oldHandler) ::SetErrorHandler( Handler::oldHandler );
62 Handler::oldHandler = nullptr;
63 return StatusCode::SUCCESS;
64}
#define ATH_MSG_DEBUG(x)
StatusCode AthROOTErrorHandlerSvc::initialize ATLAS_NOT_THREAD_SAFE()
Install fatal handler with default options.
#define ATLAS_NOT_THREAD_SAFE
getNoisyStrip() Find noisy strips from hitmaps and write out into xml/db formats
Header file for AthHistogramAlgorithm.
AthROOTErrorHandlerSvc(const std::string &name, ISvcLocator *svcLoc)
AthROOTErrorHandlerSvc: Replaces ROOT's standard error handler in order to detect Problematic ROOT is...
AthROOTErrorHandlerSvc * svc
ErrorHandlerFunc_t oldHandler