Gaudi Framework, version v23r6

Home   Generated: Wed Jan 30 2013
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
Classes | Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
ServiceManager Class Reference

The ServiceManager class is in charge of the creation of concrete instances of Services. More...

#include <ServiceManager.h>

Inheritance diagram for ServiceManager:
Inheritance graph
[legend]
Collaboration diagram for ServiceManager:
Collaboration graph
[legend]

Classes

struct  ServiceItem
 

Public Types

typedef std::list< ServiceItemListSvc
 
typedef GaudiUtils::Map
< std::string, std::string
MapType
 
- Public Types inherited from extends2< ComponentManager, ISvcManager, ISvcLocator >
typedef extends2 base_class
 Typedef to this class.
 
typedef extend_interfaces2
< ISvcManager, ISvcLocator
extend_interfaces_base
 Typedef to the base of this class.
 
typedef
extend_interfaces_base::ext_iids 
interfaces
 MPL set of all the implemented interfaces.
 
- Public Types inherited from extend_interfaces2< I1, I2 >
typedef mpl::fold< typename
I1::iid::iids::type, typename
I2::iid::iids::type,
mpl::insert< mpl::_1, mpl::_2 >
>::type 
ext_iids
 MPL set of interfaces extended by this one.
 

Public Member Functions

 ServiceManager (IInterface *application)
 default creator
 
SmartIF< ISvcLocator > & serviceLocator () const
 Function needed by CommonMessaging.
 
virtual ~ServiceManager ()
 virtual destructor
 
virtual const std::list
< IService * > & 
getServices () const
 Return the list of Services.
 
virtual bool existsService (const std::string &name) const
 implementation of ISvcLocation::existsService
 
virtual StatusCode addService (IService *svc, int prio=10)
 implementation of ISvcManager::addService
 
virtual StatusCode addService (const Gaudi::Utils::TypeNameString &typeName, int prio=10)
 implementation of ISvcManager::addService
 
virtual StatusCode removeService (IService *svc)
 implementation of ISvcManager::removeService
 
virtual StatusCode removeService (const std::string &name)
 implementation of ISvcManager::removeService
 
virtual StatusCode declareSvcType (const std::string &svcname, const std::string &svctype)
 implementation of ISvcManager::declareSvcType
 
virtual SmartIF< IService > & createService (const Gaudi::Utils::TypeNameString &nametype)
 implementation of ISvcManager::createService
 
virtual StatusCode initialize ()
 Initialization (from CONFIGURED to INITIALIZED).
 
virtual StatusCode start ()
 Start (from INITIALIZED to RUNNING).
 
virtual StatusCode stop ()
 Stop (from RUNNING to INITIALIZED).
 
virtual StatusCode finalize ()
 Finalize (from INITIALIZED to CONFIGURED).
 
virtual StatusCode reinitialize ()
 Initialization (from INITIALIZED or RUNNING to INITIALIZED, via CONFIGURED).
 
virtual StatusCode restart ()
 Initialization (from RUNNING to RUNNING, via INITIALIZED).
 
virtual int getPriority (const std::string &name) const
 manage priorities of services
 
virtual StatusCode setPriority (const std::string &name, int pri)
 
virtual bool loopCheckEnabled () const
 Get the value of the initialization loop check flag.
 
virtual void setLoopCheckEnabled (bool en)
 Set the value of the initialization loop check flag.
 
const std::stringname () const
 Return the name of the manager (implementation of INamedInterface)
 
virtual SmartIF< IService > & service (const Gaudi::Utils::TypeNameString &typeName, const bool createIf=true)
 Returns a smart pointer to a service.
 
- Public Member Functions inherited from extends2< ComponentManager, ISvcManager, ISvcLocator >
 extends2 (A1 a1, A2 a2, A3 a3)
 Templated constructor with 3 arguments.
 
 extends2 (A1 a1, A2 a2)
 Templated constructor with 2 arguments.
 
 extends2 (A1 a1)
 Templated constructor with 1 argument.
 
 extends2 ()
 Default constructor.
 
virtual void * i_cast (const InterfaceID &tid) const
 Implementation of IInterface::i_cast.
 
virtual StatusCode queryInterface (const InterfaceID &ti, void **pp)
 Implementation of IInterface::queryInterface.
 
virtual std::vector< std::stringgetInterfaceNames () const
 Implementation of IInterface::getInterfaceNames.
 
virtual ~extends2 ()
 Virtual destructor.
 
- Public Member Functions inherited from ComponentManager
 ComponentManager (IInterface *application, const InterfaceID &baseIID)
 Constructor.
 
virtual const InterfaceIDcomponentBaseInterface () const
 Basic interface id of the managed components.
 
virtual ~ComponentManager ()
 Virtual destructor.
 
virtual StatusCode configure ()
 Configuration (from OFFLINE to CONFIGURED).
 
virtual StatusCode terminate ()
 Initialization (from CONFIGURED to OFFLINE).
 
virtual Gaudi::StateMachine::State FSMState () const
 Get the current state.
 
virtual Gaudi::StateMachine::State targetFSMState () const
 When we are in the middle of a transition, get the state where the transition is leading us.
 
- Public Member Functions inherited from CommonMessaging< implements1< IComponentManager > >
 CommonMessaging (const A1 &a1, const A2 &a2, const A3 &a3)
 Templated constructor with 3 arguments.
 
 CommonMessaging (const A1 &a1, const A2 &a2)
 Templated constructor with 2 arguments.
 
 CommonMessaging (const A1 &a1)
 Templated constructor with 1 argument.
 
 CommonMessaging ()
 Default constructor.
 
virtual ~CommonMessaging ()
 Virtual destructor.
 
SmartIF< IMessageSvc > & msgSvc () const
 The standard message service.
 
MsgStreammsgStream () const
 Return an uninitialized MsgStream.
 
MsgStreammsgStream (const MSG::Level level) const
 Predefined configurable message stream for the efficient printouts.
 
MsgStreamalways () const
 shortcut for the method msgStream(MSG::ALWAYS)
 
MsgStreamfatal () const
 shortcut for the method msgStream(MSG::FATAL)
 
MsgStreamerr () const
 shortcut for the method msgStream(MSG::ERROR)
 
MsgStreamerror () const
 shortcut for the method msgStream(MSG::ERROR)
 
MsgStreamwarning () const
 shortcut for the method msgStream(MSG::WARNING)
 
MsgStreaminfo () const
 shortcut for the method msgStream(MSG::INFO)
 
MsgStreamdebug () const
 shortcut for the method msgStream(MSG::DEBUG)
 
MsgStreamverbose () const
 shortcut for the method msgStream(MSG::VERBOSE)
 
MsgStreammsg () const
 shortcut for the method msgStream(MSG::INFO)
 
MSG::Level msgLevel () const
 get the output level from the embedded MsgStream
 
bool msgLevel (MSG::Level lvl) const
 get the output level from the embedded MsgStream
 
- Public Member Functions inherited from extend_interfaces2< I1, I2 >
virtual ~extend_interfaces2 ()
 Virtual destructor.
 

Private Member Functions

ListSvc::iterator find (const std::string &name)
 
ListSvc::const_iterator find (const std::string &name) const
 
ListSvc::iterator find (const IService *ptr)
 
ListSvc::const_iterator find (const IService *ptr) const
 

Private Attributes

ListSvc m_listsvc
 List of service maintained by ServiceManager.
 
MapType m_maptype
 Map of service name and service type.
 
bool m_loopCheck
 Check for service initialization loops.
 
SmartIF< IServicem_appSvc
 Pointer to the application IService interface.
 
std::list< IService * > m_listOfPtrs
 List of pointers to the know services used to implement getServices()
 
GaudiUtils::Map< InterfaceID,
SmartIF< IInterface > > 
m_defaultImplementations
 
boost::recursive_mutex m_svcinitmutex
 Mutex to synchronize shared service initialization between threads.
 

Additional Inherited Members

- Static Public Member Functions inherited from IInterface
static const InterfaceIDinterfaceID ()
 Return an instance of InterfaceID identifying the interface.
 
- Protected Member Functions inherited from CommonMessaging< implements1< IComponentManager > >
void updateMsgStreamOutputLevel (int level)
 Update the output level of the cached MsgStream.
 
- Protected Attributes inherited from ComponentManager
SmartIF< IInterfacem_application
 Pointer to the owner of the manager.
 
SmartIF< IStatefulm_stateful
 Pointer to the IStateful interface of the owner.
 
InterfaceID m_basicInterfaceId
 Basic interface id of the managed components.
 
SmartIF< ISvcLocatorm_svcLocator
 Service locator (needed to access the MessageSvc)
 

Detailed Description

The ServiceManager class is in charge of the creation of concrete instances of Services.

The ApplicationMgr delegates the creation and bookkeeping of services to the ServiceManager. In order to be able to create services from which it is not know the concrete type it requires that the services has been declared in one of 3 possible ways: an abstract static creator function, a dynamic link library or an abstract factory reference.

Author
Pere Mato

Definition at line 37 of file ServiceManager.h.

Member Typedef Documentation

Definition at line 58 of file ServiceManager.h.

Definition at line 59 of file ServiceManager.h.

Constructor & Destructor Documentation

ServiceManager::ServiceManager ( IInterface application)

default creator

Definition at line 26 of file ServiceManager.cpp.

:
m_loopCheck(true),
m_appSvc(application)
{
// Set the service locator to myself
m_svcLocator = static_cast<ISvcLocator*>(this);
addRef(); // Initial count set to 1
}
ServiceManager::~ServiceManager ( )
virtual

virtual destructor

Definition at line 38 of file ServiceManager.cpp.

{
//-- inform the orphan services that I am gone....
for (ListSvc::iterator it = m_listsvc.begin(); it != m_listsvc.end(); it++ ) {
it->service->setServiceManager(0);
}
}

Member Function Documentation

StatusCode ServiceManager::addService ( IService svc,
int  prio = 10 
)
virtual

implementation of ISvcManager::addService

Definition at line 97 of file ServiceManager.cpp.

{
if (it != m_listsvc.end()) {
it->priority = prio; // if the service is already known, it is equivalent to a setPriority
it->active = true; // and make it active
} else {
m_listsvc.push_back(ServiceItem(svc,prio,true));
}
}
StatusCode ServiceManager::addService ( const Gaudi::Utils::TypeNameString typeName,
int  prio = 10 
)
virtual

implementation of ISvcManager::addService

Definition at line 112 of file ServiceManager.cpp.

{
ListSvc::iterator it = find(typeName.name()); // try to find the service by name
if (it == m_listsvc.end()) { // not found
// If the service does not exist, we create it
if (svc.isValid()) {
sc = svc->sysInitialize();
sc = svc->sysStart();
}
}
it = find(svc.get()); // now it is in the list because createService added it
if(sc.isFailure()) { // if initialization failed, remove it from the list
error() << "Unable to initialize service \"" << typeName.name() << "\""
<< endmsg;
// Note: removing it from the list + the SmartIF going out of scope should trigger the delete
// delete svc.get();
return sc;
} else { // initialization successful, we can work with the service
// Move the just initialized service to the back of the list
// (we care more about order of initialization than of creation)
it = --m_listsvc.end(); // last entry (the iterator was invalidated by erase)
}
} else {
}
}
// 'it' is defined because either we found the service or we created it
// Now we can activate the service
it->priority = prio; // if the service is already known, it is equivalent to a setPriority
it->active = true; // and make it active
}
SmartIF< IService > & ServiceManager::createService ( const Gaudi::Utils::TypeNameString nametype)
virtual

implementation of ISvcManager::createService

: check how this hack works

: what does this mean?

Definition at line 47 of file ServiceManager.cpp.

{
// Check if the service is already existing
if(existsService(typeName.name())) {
// return an error because a service with that name already exists
return no_service;
}
rc.setChecked(); //hack to avoid going into infinite recursion on ~StatusCode
const std::string &name = typeName.name();
if (!typeName.haveType()) { // the type is not explicit
// see we have some specific type mapping for the name
if( it != m_maptype.end() ) {
type = (*it).second; // use the declared type
}
}
if ( (ip = type.find("__")) != std::string::npos) {
type.erase(ip,type.length());
}
IService* service = PluginService::Create<IService*>(type, name, static_cast<ISvcLocator*>(this)); // serviceLocator().get());
if ( !service ) {
service = PluginService::CreateWithId<IService*>(type, name, static_cast<ISvcLocator*>(this)); // serviceLocator().get());
}
if ( service ) {
// Check the compatibility of the version of the interface obtained
fatal() << "Incompatible interface IService version for " << type << endmsg;
return no_service;
}
service->setServiceManager(this);
return m_listsvc.back().service;
}
fatal() << "No Service factory for " << type << " available." << endmsg;
return no_service;
}
StatusCode ServiceManager::declareSvcType ( const std::string svcname,
const std::string svctype 
)
virtual

implementation of ISvcManager::declareSvcType

Definition at line 233 of file ServiceManager.cpp.

{
if( p.second == false) {
p = m_maptype.insert(std::make_pair(svcname, svctype) );
if( p.second == false) return StatusCode::FAILURE;
}
}
bool ServiceManager::existsService ( const std::string name) const
virtual

implementation of ISvcLocation::existsService

Definition at line 202 of file ServiceManager.cpp.

{
return find(name) != m_listsvc.end();
}
StatusCode ServiceManager::finalize ( )
virtual

Finalize (from INITIALIZED to CONFIGURED).

Reimplemented from ComponentManager.

Definition at line 401 of file ServiceManager.cpp.

{
// make sure that HistogramDataSvc and THistSvc get finalized after the
// ToolSvc, and StatusCodeSvc after that
int pri_tool = getPriority("ToolSvc");
if (pri_tool != 0) {
setPriority("THistSvc",pri_tool-1).ignore();
setPriority("ChronoStatSvc",pri_tool-2).ignore();
setPriority("AuditorSvc",pri_tool-3).ignore();
setPriority("NTupleSvc",pri_tool-1).ignore();
setPriority("HistogramDataSvc",pri_tool-1).ignore();
// Preserve the relative ordering between HistogramDataSvc and HistogramPersistencySvc
setPriority("HistogramPersistencySvc",pri_tool-2).ignore();
}
// make sure the StatusCodeSvc gets finalized really late:
setPriority("StatusCodeSvc",-9999).ignore();
m_listsvc.sort(); // ensure that the list is ordered by priority
// we work on a copy to avoid to operate twice on the services created on demand
// (which are already in the correct state).
ListSvc tmpList(m_listsvc);
// call finalize() for all services in reverse order
for (rit = tmpList.rbegin(); rit != tmpList.rend(); ++rit ) {
if (!rit->active) continue; // only act on active services
const std::string& name = rit->service->name();
// ignore the current state for the moment
// if( Gaudi::StateMachine::INITIALIZED == rit->service->state() ) {
DEBMSG << "Finalizing service " << name << endmsg;
if ( !(rit->service->sysFinalize()).isSuccess() ) {
warning() << "Finalization of service " << name << " failed" << endmsg;
}
}
DEBMSG << "Service reference count check:" << endmsg;
while (!tmpList.empty()) {
it = tmpList.begin();
const std::string& name = it->service->name();
const unsigned long rc = it->service->refCount() - 1; // exclude the count due to the temporary list
DEBMSG << "---- " << name
<< " (refCount = " << rc << ")" << endmsg;
if (rc < 1) {
warning() << "Too low reference count for " << name
<< " (should not go below 1 at this point)" << endmsg;
it->service->addRef();
}
tmpList.pop_front();
}
// loop over all Active Services, removing them one by one.
// They should be deleted because the reference counting goes to 0.
it = m_listsvc.begin();
while (it != m_listsvc.end()) {
if (it->active) {
it = m_listsvc.erase(it);
} else {
++it;
}
}
return sc ;
}
ListSvc::iterator ServiceManager::find ( const std::string name)
inlineprivate

Definition at line 132 of file ServiceManager.h.

{
}
ListSvc::const_iterator ServiceManager::find ( const std::string name) const
inlineprivate

Definition at line 135 of file ServiceManager.h.

{
}
ListSvc::iterator ServiceManager::find ( const IService ptr)
inlineprivate

Definition at line 138 of file ServiceManager.h.

{
return std::find(m_listsvc.begin(), m_listsvc.end(), ptr);
}
ListSvc::const_iterator ServiceManager::find ( const IService ptr) const
inlineprivate

Definition at line 141 of file ServiceManager.h.

{
return std::find(m_listsvc.begin(), m_listsvc.end(), ptr);
}
int ServiceManager::getPriority ( const std::string name) const
virtual

manage priorities of services

Definition at line 471 of file ServiceManager.cpp.

{
//------------------------------------------------------------------------------
return (it != m_listsvc.end()) ? it->priority: 0;
}
const std::list< IService * > & ServiceManager::getServices ( ) const
virtual

Return the list of Services.

Definition at line 191 of file ServiceManager.cpp.

{
for (ListSvc::const_iterator it = m_listsvc.begin(); it != m_listsvc.end(); ++it) {
m_listOfPtrs.push_back(const_cast<IService*>(it->service.get()));
}
return m_listOfPtrs;
}
StatusCode ServiceManager::initialize ( )
virtual

Initialization (from CONFIGURED to INITIALIZED).

Reimplemented from ComponentManager.

Definition at line 247 of file ServiceManager.cpp.

{
m_listsvc.sort(); // ensure that the list is ordered by priority
// we work on a copy to avoid to operate twice on the services created on demand
// (which are already in the correct state.
ListSvc tmpList(m_listsvc);
// call initialize() for all services
for (ListSvc::iterator it = tmpList.begin(); it != tmpList.end(); ++it ) {
if (!it->active) continue; // only act on active services
const std::string& name = it->service->name();
switch (it->service->FSMState()) {
DEBMSG << "Service " << name << " already initialized" << endmsg;
break;
DEBMSG << "Initializing service " << name << endmsg;
sc = it->service->sysInitialize();
if( !sc.isSuccess() ) {
error() << "Unable to initialize Service: " << name << endmsg;
return sc;
} break;
default:
error() << "Service " << name
<< " not in the correct state to be initialized ("
<< it->service->FSMState() << ")" << endmsg;
}
}
}
bool ServiceManager::loopCheckEnabled ( ) const
virtual

Get the value of the initialization loop check flag.

Definition at line 492 of file ServiceManager.cpp.

{
return m_loopCheck;
}
const std::string& ServiceManager::name ( ) const
inlinevirtual

Return the name of the manager (implementation of INamedInterface)

Implements CommonMessaging< implements1< IComponentManager > >.

Definition at line 117 of file ServiceManager.h.

{
static std::string _name = "ServiceManager";
return _name;
}
StatusCode ServiceManager::reinitialize ( )
virtual

Initialization (from INITIALIZED or RUNNING to INITIALIZED, via CONFIGURED).

Reimplemented from ComponentManager.

Definition at line 355 of file ServiceManager.cpp.

{
m_listsvc.sort(); // ensure that the list is ordered by priority
// we work on a copy to avoid to operate twice on the services created on demand
// (which are already in the correct state.
ListSvc tmpList(m_listsvc);
// Re-Initialize all services
for ( it = tmpList.begin(); it != tmpList.end(); ++it ) {
if (!it->active) continue; // only act on active services
sc = it->service->sysReinitialize();
if( !sc.isSuccess() ) {
error() << "Unable to re-initialize Service: " << it->service->name() << endmsg;
}
}
}
StatusCode ServiceManager::removeService ( IService svc)
virtual

implementation of ISvcManager::removeService

Definition at line 209 of file ServiceManager.cpp.

{
if (it != m_listsvc.end()) {
}
}
StatusCode ServiceManager::removeService ( const std::string name)
virtual

implementation of ISvcManager::removeService

Definition at line 221 of file ServiceManager.cpp.

StatusCode ServiceManager::restart ( )
virtual

Initialization (from RUNNING to RUNNING, via INITIALIZED).

Reimplemented from ComponentManager.

Definition at line 378 of file ServiceManager.cpp.

{
m_listsvc.sort(); // ensure that the list is ordered by priority
// we work on a copy to avoid to operate twice on the services created on demand
// (which are already in the correct state.
ListSvc tmpList(m_listsvc);
// Re-Start all services
for ( it = tmpList.begin(); it != tmpList.end(); ++it ) {
if (!it->active) continue; // only act on active services
sc = it->service->sysRestart();
if( !sc.isSuccess() ) {
error() << "Unable to re-start Service: " << it->service->name() << endmsg;
}
}
}
SmartIF< IService > & ServiceManager::service ( const Gaudi::Utils::TypeNameString typeName,
const bool  createIf = true 
)
virtual

Returns a smart pointer to a service.

Definition at line 155 of file ServiceManager.cpp.

{
const std::string &name = typeName.name();
// Acquire the RAII lock to avoid simultaneous attempts from different threads to initialize a service
boost::lock_guard<boost::recursive_mutex> lck(m_svcinitmutex);
ListSvc::iterator it = find(name);
if (it != m_listsvc.end()) {
if (m_loopCheck &&
(createIf && it->service->FSMState() == Gaudi::StateMachine::CONFIGURED)) {
<< "Initialization loop detected when creating service \"" << name
<< "\""
<< endmsg;
return no_service;
}
return it->service;
} else {
// Service not found. The user may be interested in one of the interfaces
// of the application manager itself
if( name == "ApplicationMgr" ||
name == "APPMGR" ||
name == "" ) {
return m_appSvc;
} else if ( createIf ){
//last resort: we try to create the service
if (addService(typeName).isSuccess()){
return find(name)->service;
}
}
}
return no_service;
}
SmartIF<ISvcLocator>& ServiceManager::serviceLocator ( ) const
inlinevirtual

Function needed by CommonMessaging.

Reimplemented from ComponentManager.

Definition at line 65 of file ServiceManager.h.

{
return m_svcLocator;
}
void ServiceManager::setLoopCheckEnabled ( bool  en)
virtual

Set the value of the initialization loop check flag.

Definition at line 498 of file ServiceManager.cpp.

{
}
StatusCode ServiceManager::setPriority ( const std::string name,
int  pri 
)
virtual

Definition at line 479 of file ServiceManager.cpp.

{
//------------------------------------------------------------------------------
if (it != m_listsvc.end()) {
it->priority = prio;
}
}
StatusCode ServiceManager::start ( )
virtual

Start (from INITIALIZED to RUNNING).

Reimplemented from ComponentManager.

Definition at line 282 of file ServiceManager.cpp.

{
m_listsvc.sort(); // ensure that the list is ordered by priority
// we work on a copy to avoid to operate twice on the services created on demand
// (which are already in the correct state.
ListSvc tmpList(m_listsvc);
// call initialize() for all services
for (ListSvc::iterator it = tmpList.begin(); it != tmpList.end(); ++it ) {
if (!it->active) continue; // only act on active services
const std::string& name = it->service->name();
switch (it->service->FSMState()) {
DEBMSG << "Service " << name
<< " already started" << endmsg;
break;
DEBMSG << "Starting service " << name << endmsg;
sc = it->service->sysStart();
if( !sc.isSuccess() ) {
error() << "Unable to start Service: " << name << endmsg;
return sc;
} break;
default:
error() << "Service " << name
<< " not in the correct state to be started ("
<< it->service->FSMState() << ")" << endmsg;
}
}
}
StatusCode ServiceManager::stop ( )
virtual

Stop (from RUNNING to INITIALIZED).

Reimplemented from ComponentManager.

Definition at line 319 of file ServiceManager.cpp.

{
m_listsvc.sort(); // ensure that the list is ordered by priority
// we work on a copy to avoid to operate twice on the services created on demand
// (which are already in the correct state.
ListSvc tmpList(m_listsvc);
// call stop() for all services
for (it = tmpList.rbegin(); it != tmpList.rend(); ++it ) {
if (!it->active) continue; // only act on active services
const std::string& name = it->service->name();
switch (it->service->FSMState()) {
DEBMSG << "Service " << name << " already stopped" << endmsg;
break;
DEBMSG << "Stopping service " << name << endmsg;
sc = it->service->sysStop();
if( !sc.isSuccess() ) {
error() << "Unable to stop Service: " << name << endmsg;
return sc;
} break;
default:
DEBMSG << "Service " << name
<< " not in the correct state to be stopped ("
<< it->service->FSMState() << ")" << endmsg;
}
}
}

Member Data Documentation

SmartIF<IService> ServiceManager::m_appSvc
private

Pointer to the application IService interface.

Definition at line 151 of file ServiceManager.h.

GaudiUtils::Map<InterfaceID, SmartIF<IInterface> > ServiceManager::m_defaultImplementations
private

Definition at line 156 of file ServiceManager.h.

std::list<IService*> ServiceManager::m_listOfPtrs
mutableprivate

List of pointers to the know services used to implement getServices()

Definition at line 154 of file ServiceManager.h.

ListSvc ServiceManager::m_listsvc
private

List of service maintained by ServiceManager.

Definition at line 146 of file ServiceManager.h.

bool ServiceManager::m_loopCheck
private

Check for service initialization loops.

Definition at line 148 of file ServiceManager.h.

MapType ServiceManager::m_maptype
private

Map of service name and service type.

Definition at line 147 of file ServiceManager.h.

boost::recursive_mutex ServiceManager::m_svcinitmutex
private

Mutex to synchronize shared service initialization between threads.

Definition at line 159 of file ServiceManager.h.


The documentation for this class was generated from the following files:
Generated at Wed Jan 30 2013 17:13:48 for Gaudi Framework, version v23r6 by Doxygen version 1.8.2 written by Dimitri van Heesch, © 1997-2004