From: Christian P. <cp...@us...> - 2005-05-07 11:56:01
|
Update of /cvsroot/pclasses/pclasses2/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29688/src Modified Files: Factory.cpp Log Message: - Added thread-safety to Factory and System::Plugin Index: Factory.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/Factory.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- Factory.cpp 6 May 2005 15:16:01 -0000 1.1 +++ Factory.cpp 7 May 2005 11:55:47 -0000 1.2 @@ -46,7 +46,7 @@ } FactoryBase* findFactory(const std::string& ifaceType, - const std::string& contextType) + const std::string& contextType) const { FactoryMap::const_iterator i = _factories.find(std::make_pair(ifaceType,contextType)); @@ -54,15 +54,23 @@ return i != _factories.end() ? i->second : 0; } + CoreMutex& mutex() + { + return _mutex; + } + private: FactoryInstanceMap() {} ~FactoryInstanceMap() {} FactoryMap _factories; + CoreMutex _mutex; }; typedef std::list<FactoryBase::LoaderFunc> FactoryLoaderList; + FactoryLoaderList FactoryLoaders; +CoreMutex FactoryLoadersMutex; FactoryBase::FactoryBase() { @@ -78,6 +86,7 @@ P_TRACE_GLOBAL() << "FactoryBase::loadType() running loaders for ifaceType=" << ifaceType << ", contextType=" << contextType << ", key=" << key; + CoreMutex::ScopedLock lck(FactoryLoadersMutex); FactoryLoaderList::const_iterator i = FactoryLoaders.begin(); while(i != FactoryLoaders.end()) { @@ -88,6 +97,7 @@ void FactoryBase::registerLoader(LoaderFunc lf) { + CoreMutex::ScopedLock lck(FactoryLoadersMutex); FactoryLoaders.push_back(lf); } @@ -95,6 +105,8 @@ const std::string& contextType, FactoryCreateFunc createFunc) { FactoryInstanceMap& instMap = FactoryInstanceMap::instance(); + + CoreMutex::ScopedLock(instMap.mutex()); FactoryBase* ret = instMap.findFactory(ifaceType, contextType); if(!ret) { |