Update of /cvsroot/pclasses/pclasses2/src/IO
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22523/src/IO
Modified Files:
IOManager.cpp
Log Message:
- IOManager is now thread-safe
- Added some documentation
Index: IOManager.cpp
===================================================================
RCS file: /cvsroot/pclasses/pclasses2/src/IO/IOManager.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- IOManager.cpp 25 May 2005 08:02:55 -0000 1.1
+++ IOManager.cpp 6 Jun 2005 11:58:03 -0000 1.2
@@ -33,6 +33,8 @@
IOManager::~IOManager()
{
+ _requestsMtx.lock();
+
// cleanup requests ...
request_map::iterator ri = _requests.begin();
while(ri != _requests.end())
@@ -42,6 +44,9 @@
_requests.erase(di);
}
+ _requestsMtx.unlock();
+ _handlersMtx.lock();
+
// cleanup handlers ...
handler_map::iterator hi = _handlers.begin();
while(hi != _handlers.end())
@@ -50,6 +55,8 @@
handler_map::iterator di = hi++;
_handlers.erase(di);
}
+
+ _handlersMtx.unlock();
}
IORequest_Get* IOManager::get(const URL& url)
@@ -61,7 +68,7 @@
{
request = handler->get(url);
if(request)
- _requests.insert(std::make_pair(request, handler));
+ addHandlerRequest(request, handler);
}
return request;
@@ -76,7 +83,7 @@
{
request = handler->put(url);
if(request)
- _requests.insert(std::make_pair(request, handler));
+ addHandlerRequest(request, handler);
}
return request;
@@ -91,7 +98,7 @@
{
request = handler->unlink(url);
if(request)
- _requests.insert(std::make_pair(request, handler));
+ addHandlerRequest(request, handler);
}
return request;
@@ -106,7 +113,7 @@
{
request = handler->mkdir(url);
if(request)
- _requests.insert(std::make_pair(request, handler));
+ addHandlerRequest(request, handler);
}
return request;
@@ -121,7 +128,7 @@
{
request = handler->rmdir(url);
if(request)
- _requests.insert(std::make_pair(request, handler));
+ addHandlerRequest(request, handler);
}
return request;
@@ -136,7 +143,7 @@
{
request = handler->lsdir(url);
if(request)
- _requests.insert(std::make_pair(request, handler));
+ addHandlerRequest(request, handler);
}
return request;
@@ -144,6 +151,8 @@
void IOManager::finish(IORequest* req)
{
+ CoreMutex::ScopedLock lck(_requestsMtx);
+
request_map::iterator i = _requests.find(req);
if(i != _requests.end())
{
@@ -154,6 +163,8 @@
IOHandler* IOManager::findHandler(const std::string& proto)
{
+ CoreMutex::ScopedLock lck(_handlersMtx);
+
handler_map::const_iterator i = _handlers.find(proto);
if(i != _handlers.end())
return i->second;
@@ -167,6 +178,12 @@
return handler;
}
+void IOManager::addHandlerRequest(IORequest* req, IOHandler* handler)
+{
+ CoreMutex::ScopedLock lck(_requestsMtx);
+ _requests.insert(std::make_pair(req, handler));
+}
+
struct IOManager_context_t { };
IOManager& IOManager::instance()
|