The Gaudi Framework  v40r0 (475e45c1)
IncidentSvc Class Reference

Default implementation of the IIncidentSvc interface. More...

#include </builds/gaudi/Gaudi/GaudiCoreSvc/src/IncidentSvc/IncidentSvc.h>

Inheritance diagram for IncidentSvc:
Collaboration diagram for IncidentSvc:

Public Member Functions

StatusCode finalize () override
 
void addListener (IIncidentListener *lis, const std::string &type="", long priority=0, bool rethrow=false, bool singleShot=false) override
 
void removeListener (IIncidentListener *l, const std::string &type="") override
 
void fireIncident (const Incident &incident) override
 
void fireIncident (std::unique_ptr< Incident > incident) override
 
void getListeners (std::vector< IIncidentListener * > &lis, const std::string &type="") const override
 
 IncidentSvc (const std::string &name, ISvcLocator *svc)
 
 ~IncidentSvc () override
 
IIncidentSvc::IncidentPack getIncidents (const EventContext *ctx) override
 
- Public Member Functions inherited from extends< Service, IIncidentSvc >
void const * i_cast (const InterfaceID &tid) const override
 Implementation of IInterface::i_cast. More...
 
StatusCode queryInterface (const InterfaceID &ti, void **pp) override
 Implementation of IInterface::queryInterface. More...
 
std::vector< std::string > getInterfaceNames () const override
 Implementation of IInterface::getInterfaceNames. More...
 
- Public Member Functions inherited from Service
const std::string & name () const override
 Retrieve name of the service
More...
 
StatusCode configure () override
 
StatusCode initialize () override
 
StatusCode start () override
 
StatusCode stop () override
 
StatusCode finalize () override
 
StatusCode terminate () override
 
Gaudi::StateMachine::State FSMState () const override
 
Gaudi::StateMachine::State targetFSMState () const override
 
StatusCode reinitialize () override
 
StatusCode restart () override
 
StatusCode sysInitialize () override
 Initialize Service
More...
 
StatusCode sysStart () override
 Initialize Service
More...
 
StatusCode sysStop () override
 Initialize Service
More...
 
StatusCode sysFinalize () override
 Finalize Service
More...
 
StatusCode sysReinitialize () override
 Re-initialize the Service. More...
 
StatusCode sysRestart () override
 Re-initialize the Service. More...
 
 Service (std::string name, ISvcLocator *svcloc)
 Standard Constructor
More...
 
SmartIF< ISvcLocator > & serviceLocator () const override
 Retrieve pointer to service locator
More...
 
template<typename IFace = IService>
SmartIF< IFace > service (const std::string &name, bool createIf=true) const
 
template<class T >
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, ToolHandle< T > &hndl, const std::string &doc="none")
 
template<class T >
StatusCode declareTool (ToolHandle< T > &handle, bool createIf=true)
 
template<class T >
StatusCode declareTool (ToolHandle< T > &handle, const std::string &toolTypeAndName, bool createIf=true)
 Declare used tool. More...
 
template<class T >
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, ToolHandleArray< T > &hndlArr, const std::string &doc="none")
 
template<class T >
void addToolsArray (ToolHandleArray< T > &hndlArr)
 
const std::vector< IAlgTool * > & tools () const
 
SmartIF< IAuditorSvc > & auditorSvc () const
 The standard auditor service.May not be invoked before sysInitialize() has been invoked. More...
 
- Public Member Functions inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
 PropertyHolder ()=default
 
Gaudi::Details::PropertyBasedeclareProperty (Gaudi::Details::PropertyBase &prop)
 Declare a property. More...
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, Gaudi::Property< TYPE, VERIFIER, HANDLERS > &prop, const std::string &doc="none")
 Declare a PropertyBase instance setting name and documentation. More...
 
 requires (!Gaudi::Details::is_gaudi_property_v< TYPE >) Gaudi
 Helper to wrap a regular data member and use it as a regular property. More...
 
Gaudi::Details::PropertyBasedeclareRemoteProperty (const std::string &name, IProperty *rsvc, const std::string &rname="")
 Declare a remote property. More...
 
StatusCode setProperty (const std::string &name, const Gaudi::Details::PropertyBase &p) override
 set the property from another property with a different name More...
 
StatusCode setProperty (const std::string &s) override
 set the property from the formatted string More...
 
StatusCode setProperty (const Gaudi::Details::PropertyBase &p)
 Set the property from a property. More...
 
virtual StatusCode setProperty (const std::string &name, const Gaudi::Details::PropertyBase &p)=0
 Set the property from a property with a different name. More...
 
virtual StatusCode setProperty (const std::string &s)=0
 Set the property by string. More...
 
StatusCode setProperty (const std::string &name, const char *v)
 Special case for string literals. More...
 
StatusCode setProperty (const std::string &name, const std::string &v)
 Special case for std::string. More...
 
StatusCode setPropertyRepr (const std::string &n, const std::string &r) override
 set the property from name and value string representation More...
 
StatusCode getProperty (Gaudi::Details::PropertyBase *p) const override
 get the property More...
 
const Gaudi::Details::PropertyBasegetProperty (std::string_view name) const override
 get the property by name More...
 
StatusCode getProperty (std::string_view n, std::string &v) const override
 convert the property to the string More...
 
const std::vector< Gaudi::Details::PropertyBase * > & getProperties () const override
 get all properties More...
 
bool hasProperty (std::string_view name) const override
 Return true if we have a property with the given name. More...
 
Gaudi::Details::PropertyBaseproperty (std::string_view name) const
 \fixme property and bindPropertiesTo should be protected More...
 
void bindPropertiesTo (Gaudi::Interfaces::IOptionsSvc &optsSvc)
 
 PropertyHolder (const PropertyHolder &)=delete
 
PropertyHolderoperator= (const PropertyHolder &)=delete
 
- Public Member Functions inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
MSG::Level msgLevel () const
 get the cached level (originally extracted from the embedded MsgStream) More...
 
bool msgLevel (MSG::Level lvl) const
 get the output level from the embedded MsgStream More...
 

Private Types

typedef std::list< IIncidentSvc::ListenerListenerList
 
typedef GaudiUtils::HashMap< Gaudi::StringKey, std::unique_ptr< ListenerList > > ListenerMap
 
typedef tbb::concurrent_queue< std::unique_ptr< Incident > > IncQueue_t
 

Private Member Functions

ListenerMap::iterator removeListenerFromList (ListenerMap::iterator, IIncidentListener *item, bool scheduleRemoval)
 
void i_fireIncident (const Incident &incident, const std::string &type)
 Internal function to allow incidents listening to all events. More...
 

Private Attributes

ListenerMap m_listenerMap
 List of auditor names. More...
 
const std::string * m_currentIncidentType = nullptr
 Incident being fired. More...
 
std::recursive_mutex m_listenerMapMutex
 Mutex to synchronize access to m_listenerMap. More...
 
ChronoEntity m_timer
 timer & it's lock More...
 
bool m_timerLock = false
 
tbb::concurrent_unordered_map< EventContext::ContextID_t, IncQueue_tm_firedIncidents
 
tbb::concurrent_unordered_map< EventContext::ContextID_t, EventContext::ContextEvt_tm_slotEvent
 Event ID for each slot. More...
 

Additional Inherited Members

- Public Types inherited from extends< Service, IIncidentSvc >
using base_class = extends
 Typedef to this class. More...
 
using extend_interfaces_base = extend_interfaces< Interfaces... >
 Typedef to the base of this class. More...
 
- Public Types inherited from Service
using Factory = Gaudi::PluginService::Factory< IService *(const std::string &, ISvcLocator *)>
 
- Public Types inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
using PropertyHolderImpl = PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
 Typedef used to refer to this class from derived classes, as in. More...
 
- Public Types inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
using base_class = CommonMessaging
 
- Public Types inherited from extend_interfaces< Interfaces... >
using ext_iids = typename Gaudi::interface_list_cat< typename Interfaces::ext_iids... >::type
 take union of the ext_iids of all Interfaces... More...
 
- Protected Member Functions inherited from Service
std::vector< IAlgTool * > & tools ()
 
 ~Service () override
 
int outputLevel () const
 get the Service's output level More...
 
- Protected Member Functions inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
MSG::Level setUpMessaging () const
 Set up local caches. More...
 
MSG::Level resetMessaging ()
 Reinitialize internal states. More...
 
void updateMsgStreamOutputLevel (int level)
 Update the output level of the cached MsgStream. More...
 
- Protected Attributes inherited from Service
Gaudi::StateMachine::State m_state = Gaudi::StateMachine::OFFLINE
 Service state
More...
 
Gaudi::StateMachine::State m_targetState = Gaudi::StateMachine::OFFLINE
 Service state
More...
 
Gaudi::Property< int > m_outputLevel { this, "OutputLevel", MSG::NIL, "output level" }
 flag indicating whether ToolHandle tools have been added to m_tools More...
 
Gaudi::Property< bool > m_auditorInitialize { this, "AuditInitialize", false, "trigger auditor on initialize()" }
 
Gaudi::Property< bool > m_auditorStart { this, "AuditStart", false, "trigger auditor on start()" }
 
Gaudi::Property< bool > m_auditorStop { this, "AuditStop", false, "trigger auditor on stop()" }
 
Gaudi::Property< bool > m_auditorFinalize { this, "AuditFinalize", false, "trigger auditor on finalize()" }
 
Gaudi::Property< bool > m_auditorReinitialize { this, "AuditReinitialize", false, "trigger auditor on reinitialize()" }
 
Gaudi::Property< bool > m_auditorRestart { this, "AuditRestart", false, "trigger auditor on restart()" }
 
Gaudi::Property< bool > m_autoRetrieveTools
 
Gaudi::Property< bool > m_checkToolDeps
 
SmartIF< IAuditorSvcm_pAuditorSvc
 Auditor Service
More...
 

Detailed Description

Default implementation of the IIncidentSvc interface.

This implementation is thread-safe with the following features:

Definition at line 35 of file IncidentSvc.h.

Member Typedef Documentation

◆ IncQueue_t

typedef tbb::concurrent_queue<std::unique_ptr<Incident> > IncidentSvc::IncQueue_t
private

Definition at line 80 of file IncidentSvc.h.

◆ ListenerList

Definition at line 40 of file IncidentSvc.h.

◆ ListenerMap

Definition at line 41 of file IncidentSvc.h.

Constructor & Destructor Documentation

◆ IncidentSvc()

IncidentSvc::IncidentSvc ( const std::string &  name,
ISvcLocator svc 
)

Definition at line 44 of file IncidentSvc.cpp.

44 : base_class( name, svc ) {}

◆ ~IncidentSvc()

IncidentSvc::~IncidentSvc ( )
override

Definition at line 45 of file IncidentSvc.cpp.

45 { auto lock = std::scoped_lock{ m_listenerMapMutex }; }

Member Function Documentation

◆ addListener()

void IncidentSvc::addListener ( IIncidentListener lis,
const std::string &  type = "",
long  priority = 0,
bool  rethrow = false,
bool  singleShot = false 
)
override

Definition at line 55 of file IncidentSvc.cpp.

56  {
57  static const std::string all{ "ALL" };
58  auto lock = std::scoped_lock{ m_listenerMapMutex };
59 
60  const std::string& ltype = ( !type.empty() ? type : all );
61 
62  // find if the type already exists
63  auto itMap = m_listenerMap.find( ltype );
64  if ( itMap == m_listenerMap.end() ) {
65  // if not found, create and insert now a list of listeners
66  auto p = m_listenerMap.insert( { ltype, std::make_unique<ListenerList>() } );
67  if ( !p.second ) { /* OOPS */
68  }
69  itMap = p.first;
70  }
71  auto& llist = *itMap->second;
72  // add Listener ordered by priority -- higher priority first,
73  // and then add behind listeneres with the same priority
74  // -- so we skip over all items with higher or same priority
75  auto i = std::partition_point( std::begin( llist ), std::end( llist ),
76  [&]( const Listener& j ) { return j.priority >= prio; } );
77  // We insert before the current position
78  DEBMSG << "Adding [" << type << "] listener '" << getListenerName( lis ) << "' with priority " << prio << endmsg;
79  llist.emplace( i, IIncidentSvc::Listener{ lis, prio, rethrow, singleShot } );
80 }

◆ finalize()

StatusCode IncidentSvc::finalize ( )
override

Definition at line 46 of file IncidentSvc.cpp.

46  {
47  DEBMSG << m_timer.outputUserTime( "Incident timing: Mean(+-rms)/Min/Max:%3%(+-%4%)/%6%/%7%[ms] ", System::milliSec )
48  << m_timer.outputUserTime( "Total:%2%[s]", System::Sec ) << endmsg;
49 
50  m_firedIncidents.clear();
51 
52  // Finalize this specific service
53  return Service::finalize();
54 }

◆ fireIncident() [1/2]

void IncidentSvc::fireIncident ( const Incident incident)
override

Definition at line 190 of file IncidentSvc.cpp.

190  {
191 
193 
194  // Call specific listeners
195  i_fireIncident( incident, incident.type() );
196  // Try listeners registered for ALL incidents
197  if ( incident.type() != "ALL" ) { // avoid double calls if somebody fires the incident "ALL"
198  i_fireIncident( incident, "ALL" );
199  }
200 }

◆ fireIncident() [2/2]

void IncidentSvc::fireIncident ( std::unique_ptr< Incident incident)
override

Definition at line 201 of file IncidentSvc.cpp.

201  {
202 
203  const EventContext& ctx = incident->context();
204  DEBMSG << "Async incident '" << incident->type() << "' fired on context " << ctx << endmsg;
205 
206  // create or get incident queue for slot
207  auto [incItr, inserted1] = m_firedIncidents.insert( { ctx.slot(), IncQueue_t() } );
208  // save or get current event for slot
209  auto [slotItr, inserted2] = m_slotEvent.insert( { ctx.slot(), ctx.evt() } );
210 
211  // if new event in slot, clear all remaining old incidents
212  if ( slotItr->second != ctx.evt() ) {
213  slotItr->second = ctx.evt();
214 
215  if ( msgLevel( MSG::DEBUG ) and !incItr->second.empty() ) {
216  debug() << "Clearing remaining obsolete incidents from slot " << ctx.slot() << ":";
217  std::unique_ptr<Incident> inc;
218  while ( incItr->second.try_pop( inc ) ) { debug() << " " << inc->type() << "(" << inc->context() << ")"; }
219  debug() << endmsg;
220  }
221  incItr->second.clear();
222  }
223  incItr->second.push( std::move( incident ) );
224 }

◆ getIncidents()

IIncidentSvc::IncidentPack IncidentSvc::getIncidents ( const EventContext ctx)
override

Definition at line 241 of file IncidentSvc.cpp.

241  {
243  if ( ctx ) {
244  auto incs = m_firedIncidents.find( ctx->slot() );
245  if ( incs != m_firedIncidents.end() ) {
246  std::unique_ptr<Incident> inc;
247 
248  DEBMSG << "Collecting listeners fired on context " << *ctx << endmsg;
249  while ( incs->second.try_pop( inc ) ) {
250  // ensure incident is for this event (should not be necessary)
251  if ( inc->context().evt() == ctx->evt() ) {
252  std::scoped_lock lock( m_listenerMapMutex );
253  auto i = m_listenerMap.find( inc->type() );
254  if ( i != m_listenerMap.end() ) {
255  p.emplace_back( std::move( inc ), std::vector<Listener>{ i->second->begin(), i->second->end() } );
256  }
257  }
258  }
259  }
260  }
261  return p;
262 }

◆ getListeners()

void IncidentSvc::getListeners ( std::vector< IIncidentListener * > &  lis,
const std::string &  type = "" 
) const
override

Definition at line 226 of file IncidentSvc.cpp.

226  {
227  static const std::string ALL{ "ALL" };
228  auto lock = std::scoped_lock{ m_listenerMapMutex };
229 
230  const std::string& ltype = ( !type.empty() ? type : ALL );
231 
232  l.clear();
233  auto i = m_listenerMap.find( ltype );
234  if ( i != m_listenerMap.end() ) {
235  l.reserve( i->second->size() );
236  std::transform( std::begin( *i->second ), std::end( *i->second ), std::back_inserter( l ),
237  []( const Listener& j ) { return j.iListener; } );
238  }
239 }

◆ i_fireIncident()

void IncidentSvc::i_fireIncident ( const Incident incident,
const std::string &  type 
)
private

Internal function to allow incidents listening to all events.

Definition at line 117 of file IncidentSvc.cpp.

117  {
118 
119  auto lock = std::scoped_lock{ m_listenerMapMutex };
120 
121  // Wouldn't it be better to write a small 'ReturnCode' service which
122  // looks for these 'special' incidents and does whatever needs to
123  // be done instead of making a special case here?
124 
125  // Special case: FailInputFile incident must set the application return code
126  if ( incident.type() == IncidentType::FailInputFile || incident.type() == IncidentType::CorruptedInputFile ) {
127  auto appmgr = serviceLocator()->as<IProperty>();
128  Gaudi::setAppReturnCode( appmgr, incident.type() == IncidentType::FailInputFile
131  .ignore();
132  }
133 
134  auto ilisteners = m_listenerMap.find( listenerType );
135  if ( m_listenerMap.end() == ilisteners ) return;
136 
137  // setting this pointer will avoid that a call to removeListener() during
138  // the loop triggers a segfault
139  m_currentIncidentType = &incident.type();
140  std::string curIncTyp;
141  if ( m_currentIncidentType != nullptr ) {
142  curIncTyp = *m_currentIncidentType;
143  } else {
144  curIncTyp = "UNKNOWN";
145  }
146 
147  bool firedSingleShot = false;
148 
149  auto& listeners = *ilisteners->second;
150 
151  for ( auto& listener : listeners ) {
152 
153  VERMSG << "Calling '" << getListenerName( listener.iListener ) << "' for incident [" << incident.type() << "]"
154  << endmsg;
155 
156  // handle exceptions if they occur
157  try {
158  listener.iListener->handle( incident );
159  } catch ( const GaudiException& exc ) {
160  error() << "Exception with tag=" << exc.tag()
161  << " is caught"
162  " handling incident "
163  << curIncTyp << " in listener " << getListenerName( listener.iListener ) << endmsg;
164  error() << exc << endmsg;
165  if ( listener.rethrow ) { throw exc; }
166  } catch ( const std::exception& exc ) {
167  error() << "Standard std::exception is caught"
168  " handling incident "
169  << curIncTyp << " in listener " << getListenerName( listener.iListener ) << endmsg;
170  error() << exc.what() << endmsg;
171  if ( listener.rethrow ) { throw exc; }
172  } catch ( ... ) {
173  error() << "UNKNOWN Exception is caught"
174  " handling incident "
175  << curIncTyp << " in listener " << getListenerName( listener.iListener ) << endmsg;
176  if ( listener.rethrow ) { throw; }
177  }
178  // check wheter one of the listeners is singleShot
179  firedSingleShot |= listener.singleShot;
180  }
181  if ( firedSingleShot ) {
182  // remove all the singleshot listeners that got their shot...
183  listeners.erase( std::remove_if( std::begin( listeners ), std::end( listeners ), isSingleShot ),
184  std::end( listeners ) );
185  if ( listeners.empty() ) m_listenerMap.erase( ilisteners );
186  }
187 
188  m_currentIncidentType = nullptr;
189 }

◆ removeListener()

void IncidentSvc::removeListener ( IIncidentListener l,
const std::string &  type = "" 
)
override

Definition at line 99 of file IncidentSvc.cpp.

99  {
100  auto lock = std::scoped_lock{ m_listenerMapMutex };
101 
102  bool scheduleForRemoval = ( m_currentIncidentType && type == *m_currentIncidentType );
103  if ( type.empty() ) {
104  auto i = std::begin( m_listenerMap );
105  while ( i != std::end( m_listenerMap ) ) { i = removeListenerFromList( i, lis, scheduleForRemoval ); }
106  } else {
107  auto i = m_listenerMap.find( type );
108  if ( i != m_listenerMap.end() ) removeListenerFromList( i, lis, scheduleForRemoval );
109  }
110 }

◆ removeListenerFromList()

IncidentSvc::ListenerMap::iterator IncidentSvc::removeListenerFromList ( ListenerMap::iterator  i,
IIncidentListener item,
bool  scheduleRemoval 
)
private

Definition at line 82 of file IncidentSvc.cpp.

82  {
83  auto match = [&]( ListenerList::const_reference j ) { return !item || item == j.iListener; };
84 
85  auto& c = *( i->second );
86  if ( !scheduleRemoval ) {
87  ON_DEBUG std::for_each( std::begin( c ), std::end( c ), [&]( ListenerList::const_reference j ) {
88  if ( match( j ) )
89  debug() << "Removing [" << i->first << "] listener '" << getListenerName( j.iListener ) << "'" << endmsg;
90  } );
91  c.erase( std::remove_if( std::begin( c ), std::end( c ), match ), std::end( c ) );
92  } else {
93  std::for_each( std::begin( c ), std::end( c ), [&]( Listener& i ) {
94  if ( match( i ) ) i.singleShot = true; // will trigger removal as soon as it is safe
95  } );
96  }
97  return c.empty() ? m_listenerMap.erase( i ) : std::next( i );
98 }

Member Data Documentation

◆ m_currentIncidentType

const std::string* IncidentSvc::m_currentIncidentType = nullptr
private

Incident being fired.

It is used to know if we can safely remove a listener or we have to schedule its removal for later.

Definition at line 70 of file IncidentSvc.h.

◆ m_firedIncidents

tbb::concurrent_unordered_map<EventContext::ContextID_t, IncQueue_t> IncidentSvc::m_firedIncidents
private

Definition at line 81 of file IncidentSvc.h.

◆ m_listenerMap

ListenerMap IncidentSvc::m_listenerMap
private

List of auditor names.

Definition at line 66 of file IncidentSvc.h.

◆ m_listenerMapMutex

std::recursive_mutex IncidentSvc::m_listenerMapMutex
mutableprivate

Mutex to synchronize access to m_listenerMap.

Definition at line 73 of file IncidentSvc.h.

◆ m_slotEvent

tbb::concurrent_unordered_map<EventContext::ContextID_t, EventContext::ContextEvt_t> IncidentSvc::m_slotEvent
private

Event ID for each slot.

Definition at line 84 of file IncidentSvc.h.

◆ m_timer

ChronoEntity IncidentSvc::m_timer
mutableprivate

timer & it's lock

Definition at line 76 of file IncidentSvc.h.

◆ m_timerLock

bool IncidentSvc::m_timerLock = false
mutableprivate

Definition at line 77 of file IncidentSvc.h.


The documentation for this class was generated from the following files:
MSG::DEBUG
@ DEBUG
Definition: IMessageSvc.h:22
DEBMSG
#define DEBMSG
Definition: IncidentSvc.cpp:41
IIncidentSvc::Listener
Listener properties.
Definition: IIncidentSvc.h:57
System::milliSec
@ milliSec
Definition: Timing.h:54
ON_DEBUG
#define ON_DEBUG
Definition: IncidentSvc.cpp:38
IncidentSvc::IncQueue_t
tbb::concurrent_queue< std::unique_ptr< Incident > > IncQueue_t
Definition: IncidentSvc.h:80
GaudiUtils::Map::find
iterator find(const key_type &key)
Definition: Map.h:133
GaudiException
Definition: GaudiException.h:29
VERMSG
#define VERMSG
Definition: IncidentSvc.cpp:42
IncidentSvc::i_fireIncident
void i_fireIncident(const Incident &incident, const std::string &type)
Internal function to allow incidents listening to all events.
Definition: IncidentSvc.cpp:117
IncidentSvc::m_firedIncidents
tbb::concurrent_unordered_map< EventContext::ContextID_t, IncQueue_t > m_firedIncidents
Definition: IncidentSvc.h:81
GaudiKernel.Constants.ALL
ALL
Definition: Constants.py:28
gaudirun.c
c
Definition: gaudirun.py:525
IncidentSvc::m_timerLock
bool m_timerLock
Definition: IncidentSvc.h:77
CommonMessaging< implements< IService, IProperty, IStateful > >::msgLevel
MSG::Level msgLevel() const
get the cached level (originally extracted from the embedded MsgStream)
Definition: CommonMessaging.h:147
Service::finalize
StatusCode finalize() override
Definition: Service.cpp:223
extends< Service, IIncidentSvc >::base_class
extends base_class
Typedef to this class.
Definition: extends.h:23
Gaudi::ReturnCode::FailInput
constexpr int FailInput
Definition: AppReturnCode.h:32
IncidentSvc::m_timer
ChronoEntity m_timer
timer & it's lock
Definition: IncidentSvc.h:76
GaudiPartProp.decorators.all
all
decorate service
Definition: decorators.py:53
IProperty
Definition: IProperty.h:32
Incident::context
EventContext context() const
Access to the EventContext of the source of the incident.
Definition: Incident.h:55
Gaudi::Utils::begin
AttribStringParser::Iterator begin(const AttribStringParser &parser)
Definition: AttribStringParser.h:135
GaudiPython.Pythonizations.ctx
ctx
Definition: Pythonizations.py:578
Service::name
const std::string & name() const override
Retrieve name of the service
Definition: Service.cpp:333
Gaudi::cxx::for_each
void for_each(ContainerOfSynced &c, Fun &&f)
Definition: SynchronizedValue.h:98
Gaudi::setAppReturnCode
StatusCode setAppReturnCode(SmartIF< IProperty > &appmgr, int value, bool force=false)
Set the application return code.
Definition: AppReturnCode.h:58
ProduceConsume.j
j
Definition: ProduceConsume.py:104
ChronoEntity::outputUserTime
std::string outputUserTime() const
print the chrono ;
Definition: ChronoEntity.cpp:68
Gaudi::Utils::LockedChrono
Definition: LockedChrono.h:53
Gaudi::ReturnCode::CorruptedInput
constexpr int CorruptedInput
Definition: AppReturnCode.h:37
IncidentSvc::removeListenerFromList
ListenerMap::iterator removeListenerFromList(ListenerMap::iterator, IIncidentListener *item, bool scheduleRemoval)
Definition: IncidentSvc.cpp:82
MsgStream::clear
void clear(STATE_TYPE _i=std::ios_base::failbit)
Definition: MsgStream.h:177
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:198
GaudiException::tag
virtual const std::string & tag() const
name tag for the exception, or exception type
Definition: GaudiException.h:75
IncidentSvc::m_slotEvent
tbb::concurrent_unordered_map< EventContext::ContextID_t, EventContext::ContextEvt_t > m_slotEvent
Event ID for each slot.
Definition: IncidentSvc.h:84
GaudiUtils::Map::end
iterator end()
Definition: Map.h:122
IIncidentSvc::IncidentPack
std::vector< std::pair< std::unique_ptr< Incident >, std::vector< Listener > > > IncidentPack
List of incidents and their listeners.
Definition: IIncidentSvc.h:65
GaudiUtils::Map::erase
iterator erase(const_iterator pos)
Definition: Map.h:168
StatusCode::ignore
const StatusCode & ignore() const
Allow discarding a StatusCode without warning.
Definition: StatusCode.h:139
SmartIF::as
SmartIF< IFace > as() const
return a new SmartIF instance to another interface
Definition: SmartIF.h:110
gaudirun.type
type
Definition: gaudirun.py:160
System::Sec
@ Sec
Definition: Timing.h:54
gaudirun.l
dictionary l
Definition: gaudirun.py:583
IncidentSvc::m_listenerMapMutex
std::recursive_mutex m_listenerMapMutex
Mutex to synchronize access to m_listenerMap.
Definition: IncidentSvc.h:73
EventContext
Definition: EventContext.h:34
GaudiUtils::Map::insert
std::pair< iterator, bool > insert(ValueType &&val)
Definition: Map.h:154
Incident::type
const std::string & type() const
Access to the incident type.
Definition: Incident.h:43
IOTest.end
end
Definition: IOTest.py:125
IncidentSvc::m_currentIncidentType
const std::string * m_currentIncidentType
Incident being fired.
Definition: IncidentSvc.h:70
EventContext::evt
ContextEvt_t evt() const
Definition: EventContext.h:50
IncidentSvc::m_listenerMap
ListenerMap m_listenerMap
List of auditor names.
Definition: IncidentSvc.h:66
Service::serviceLocator
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator
Definition: Service.cpp:336