From: Christian P. <cp...@us...> - 2005-06-06 11:58:16
|
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() |