From 1c9bcb53e89eed300b2510942e5e95c05093903b Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 21 Jun 2010 19:00:00 +0000 Subject: [PATCH] removed deadlock situation in data multiplex git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5.0@3185 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- libretroshare/src/ft/ftdatamultiplex.cc | 29 +++++++++++++++---------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/libretroshare/src/ft/ftdatamultiplex.cc b/libretroshare/src/ft/ftdatamultiplex.cc index 7089d5901..03514d904 100644 --- a/libretroshare/src/ft/ftdatamultiplex.cc +++ b/libretroshare/src/ft/ftdatamultiplex.cc @@ -494,24 +494,29 @@ bool ftDataMultiplex::handleRecvData(const std::string& peerId, const std::string& hash, uint64_t size, uint64_t offset, uint32_t chunksize, void *data) { - RsStackMutex stack(dataMtx); /******* LOCK MUTEX ******/ - std::map::iterator it; - if (mClients.end() == (it = mClients.find(hash))) + ftTransferModule *transfer_module = NULL ; + { + RsStackMutex stack(dataMtx); /******* LOCK MUTEX ******/ + std::map::iterator it; + if (mClients.end() == (it = mClients.find(hash))) + { #ifdef MPLEX_DEBUG - std::cerr << "ftDataMultiplex::handleRecvData() ERROR: No matching Client!"; - std::cerr << std::endl; + std::cerr << "ftDataMultiplex::handleRecvData() ERROR: No matching Client!"; + std::cerr << std::endl; #endif - /* error */ - return false; - } + /* error */ + return false; + } #ifdef MPLEX_DEBUG - std::cerr << "ftDataMultiplex::handleRecvData() Passing to Module"; - std::cerr << std::endl; + std::cerr << "ftDataMultiplex::handleRecvData() Passing to Module"; + std::cerr << std::endl; #endif - - (it->second).mModule->recvFileData(peerId, offset, chunksize, data); + + transfer_module = (it->second).mModule ; + } + transfer_module->recvFileData(peerId, offset, chunksize, data); return true; }