|
Gaudi Framework, version v21r4 |
| Home | Generated: 7 Sep 2009 |
00001 #define GAUDIKERNEL_STATUSCODE_CPP 1 00002 00003 #include "GaudiKernel/StatusCode.h" 00004 #include "GaudiKernel/System.h" 00005 #include "GaudiKernel/Bootstrap.h" 00006 #include "GaudiKernel/IMessageSvc.h" 00007 #include "GaudiKernel/IStatusCodeSvc.h" 00008 #include "GaudiKernel/ISvcLocator.h" 00009 #include "GaudiKernel/MsgStream.h" 00010 #include "GaudiKernel/IssueSeverity.h" 00011 #include <fstream> 00012 #include <iostream> 00013 #include <sstream> 00014 #include <stdlib.h> 00015 00016 bool StatusCode::s_checking(false); 00017 00018 void StatusCode::enableChecking() { 00019 s_checking = true; 00020 } 00021 00022 void StatusCode::disableChecking() { 00023 s_checking = false; 00024 } 00025 00026 IssueSeverity* StatusCode::cloneSeverity(const IssueSeverity* sev) 00027 { 00028 if( sev ) return new IssueSeverity(*sev); 00029 else return 0; 00030 } 00031 00032 const IssueSeverity& StatusCode::severity() const { 00033 static IssueSeverity dummy; 00034 if (m_severity) return *m_severity; 00035 else return dummy; 00036 } 00037 00038 StatusCode::~StatusCode() { 00039 if(s_checking) { 00040 00041 if (!m_checked ) { 00042 00043 SmartIF<IMessageSvc> msg(Gaudi::svcLocator()); 00044 00045 SmartIF<IStatusCodeSvc> scs(Gaudi::svcLocator()->service("StatusCodeSvc")); 00046 00047 const size_t depth = 21; 00048 void* addresses[depth]; 00049 00050 std::string lib, fnc; 00051 void* addr = 0; 00053 if (System::backTrace(addresses, depth)) { 00054 00055 if (System::getStackLevel(addresses[2], addr, fnc, lib)) { 00056 00057 if (scs) { 00058 scs->regFnc(fnc,lib); 00059 } else { 00060 if (msg) { 00061 MsgStream log(msg,"StatusCode"); 00062 log << MSG::WARNING << "Unchecked in " << fnc << " " << lib << endmsg; 00063 } else { 00064 std::cout << MSG::WARNING << "Unchecked in " << fnc << " " << lib << std::endl; 00065 } 00066 } 00067 00068 } 00069 00070 } 00071 } 00072 } 00073 if (m_severity) delete m_severity; 00074 } 00075