Loading [MathJax]/extensions/tex2jax.js
The Gaudi Framework  v29r0 (ff2e7097)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
ThreadInitTask Class Reference

Special TBB task used by ThreadPoolSvc to wrap execution of IThreadInitTools. More...

#include <src/ThreadInitTask.h>

Inheritance diagram for ThreadInitTask:
Collaboration diagram for ThreadInitTask:

Public Member Functions

 ThreadInitTask (ToolHandleArray< IThreadInitTool > &tools, boost::barrier *b, ISvcLocator *svcLocator, bool terminate=false)
 
tbb::task * execute () override
 Execute the task. More...
 

Static Public Member Functions

static bool execFailed ()
 

Private Attributes

ToolHandleArray< IThreadInitTool > & m_tools
 
boost::barrier * m_barrier
 
SmartIF< ISvcLocatorm_serviceLocator
 
bool m_terminate
 

Static Private Attributes

static std::atomic< bool > m_execFailed
 

Detailed Description

Special TBB task used by ThreadPoolSvc to wrap execution of IThreadInitTools.

Author
Charles Leggett

Definition at line 21 of file ThreadInitTask.h.

Constructor & Destructor Documentation

ThreadInitTask::ThreadInitTask ( ToolHandleArray< IThreadInitTool > &  tools,
boost::barrier *  b,
ISvcLocator svcLocator,
bool  terminate = false 
)
inline

Definition at line 26 of file ThreadInitTask.h.

28  : m_tools( tools ), m_barrier( b ), m_serviceLocator( svcLocator ), m_terminate( terminate ){};
SmartIF< ISvcLocator > m_serviceLocator
ToolHandleArray< IThreadInitTool > & m_tools
boost::barrier * m_barrier

Member Function Documentation

static bool ThreadInitTask::execFailed ( )
inlinestatic

Definition at line 36 of file ThreadInitTask.h.

36 { return m_execFailed; }
static std::atomic< bool > m_execFailed
tbb::task * ThreadInitTask::execute ( )
override

Execute the task.

Will loop over IThreadInitTools and execute each one.

Definition at line 12 of file ThreadInitTask.cpp.

13 {
14 
16  MsgStream log( messageSvc, "ThreadInitTask" );
17 
18  const auto debug = log.level() <= MSG::DEBUG;
19 
20  if ( debug )
21  log << MSG::DEBUG << "execute in thread 0x" << std::hex << pthread_self() << " at " << this << std::dec << endmsg;
22 
23  if ( m_tools.retrieve().isFailure() ) {
24  log << MSG::ERROR << "unable to retrieve ToolHandleArray " << m_tools << endmsg;
25  m_execFailed = true;
26  } else {
27 
28  if ( m_tools.size() == 0 ) {
29  log << MSG::INFO << "no entries in Tool Array" << endmsg;
30  } else {
31  if ( debug ) log << MSG::DEBUG << "executing in thread 0x" << std::hex << pthread_self() << std::dec << endmsg;
32 
33  for ( auto& t : m_tools ) {
34 
35  try {
36 
37  if ( debug ) log << MSG::DEBUG << "calling IThreadInitTool " << t << endmsg;
38 
39  if ( !m_terminate ) {
40  t->initThread();
41  } else {
42  t->terminateThread();
43  }
44 
45  } catch ( const GaudiException& exc ) {
46  log << MSG::ERROR << "ThreadInitTool " << t << " in thread 0x" << std::hex << pthread_self() << std::dec
47  << " threw GaudiException: " << exc << endmsg;
48  m_execFailed = true;
49  } catch ( const std::exception& exc ) {
50  log << MSG::ERROR << "ThreadInitTool " << t << " in thread 0x" << std::hex << pthread_self() << std::dec
51  << " threw std::exception: " << exc.what() << endmsg;
52  m_execFailed = true;
53  } catch ( ... ) {
54  log << MSG::ERROR << "ThreadInitTool " << t << " in thread 0x" << std::hex << pthread_self() << std::dec
55  << " threw unknown exception" << endmsg;
56  m_execFailed = true;
57  }
58  }
59 
60  m_tools.release().ignore();
61  }
62  }
63 
64  if ( m_barrier != 0 ) {
65  log << MSG::INFO << "waiting at barrier in thread 0x" << std::hex << pthread_self() << std::dec << endmsg;
66  m_barrier->wait();
67  }
68 
69  return nullptr;
70 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
Define general base for Gaudi exception.
SmartIF< ISvcLocator > m_serviceLocator
static std::atomic< bool > m_execFailed
ToolHandleArray< IThreadInitTool > & m_tools
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
StatusCode retrieve()
Retrieve all tools.
Definition: GaudiHandle.h:528
T what(T...args)
STL class.
boost::barrier * m_barrier
T hex(T...args)
size_type size() const
Definition: GaudiHandle.h:494
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209

Member Data Documentation

boost::barrier* ThreadInitTask::m_barrier
private

Definition at line 41 of file ThreadInitTask.h.

std::atomic< bool > ThreadInitTask::m_execFailed
staticprivate

Definition at line 45 of file ThreadInitTask.h.

SmartIF<ISvcLocator> ThreadInitTask::m_serviceLocator
private

Definition at line 42 of file ThreadInitTask.h.

bool ThreadInitTask::m_terminate
private

Definition at line 43 of file ThreadInitTask.h.

ToolHandleArray<IThreadInitTool>& ThreadInitTask::m_tools
private

Definition at line 39 of file ThreadInitTask.h.


The documentation for this class was generated from the following files: