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)
{
|