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.

29  :
30  m_tools(tools), m_barrier(b), m_serviceLocator(svcLocator),
31  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 39 of file ThreadInitTask.h.

39 { 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 13 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()
22  << " at " << this
23  << std::dec << endmsg;
24 
25  if (m_tools.retrieve().isFailure()) {
26  log << MSG::ERROR << "unable to retrieve ToolHandleArray " << m_tools
27  << endmsg;
28  m_execFailed = true;
29  } else {
30 
31  if (m_tools.size() == 0) {
32  log << MSG::INFO << "no entries in Tool Array"
33  << endmsg;
34  } else {
35  if (debug)
36  log << MSG::DEBUG << "executing in thread 0x" << std::hex << pthread_self()
37  << std::dec << endmsg;
38 
39  for ( auto& t : m_tools ) {
40 
41  try {
42 
43  if (debug)
44  log << MSG::DEBUG << "calling IThreadInitTool " << t << endmsg;
45 
46  if (!m_terminate) {
47  t->initThread();
48  } else {
49  t->terminateThread();
50  }
51 
52  } catch( const GaudiException& exc ) {
53  log << MSG::ERROR << "ThreadInitTool " << t << " in thread 0x"
54  << std::hex << pthread_self() << std::dec << " threw GaudiException: "
55  << exc << endmsg;
56  m_execFailed = true;
57  } catch (const std::exception& exc ) {
58  log << MSG::ERROR << "ThreadInitTool " << t << " in thread 0x"
59  << std::hex << pthread_self() << std::dec << " threw std::exception: "
60  << exc.what() << endmsg;
61  m_execFailed = true;
62  } catch(...) {
63  log << MSG::ERROR << "ThreadInitTool " << t << " in thread 0x"
64  << std::hex << pthread_self() << std::dec << " threw unknown exception"
65  << endmsg;
66  m_execFailed = true;
67  }
68 
69  }
70 
71  m_tools.release().ignore();
72 
73  }
74  }
75 
76 
77  if (m_barrier != 0) {
78  log << MSG::INFO << "waiting at barrier in thread 0x" << std::hex << pthread_self()
79  << std::dec << endmsg;
80  m_barrier->wait();
81  }
82 
83  return nullptr;
84 
85 }
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:84
StatusCode retrieve()
Retrieve all tools.
Definition: GaudiHandle.h:561
T what(T...args)
STL class.
boost::barrier * m_barrier
T hex(T...args)
size_type size() const
Definition: GaudiHandle.h:516
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244

Member Data Documentation

boost::barrier* ThreadInitTask::m_barrier
private

Definition at line 45 of file ThreadInitTask.h.

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

Definition at line 49 of file ThreadInitTask.h.

SmartIF<ISvcLocator> ThreadInitTask::m_serviceLocator
private

Definition at line 46 of file ThreadInitTask.h.

bool ThreadInitTask::m_terminate
private

Definition at line 47 of file ThreadInitTask.h.

ToolHandleArray<IThreadInitTool>& ThreadInitTask::m_tools
private

Definition at line 43 of file ThreadInitTask.h.


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