- added a missing pthread_join in file checking, that eventually caused a leak of thread resources

- changed the order of check in tick() to allow cancelling a file that is being checked
- removed the hash step from mutex protection



git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4113 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
csoler 2011-03-30 22:35:09 +00:00
parent 6edee55e57
commit 451c75813d

View File

@ -401,9 +401,6 @@ bool ftTransferModule::queryInactive()
if (mFileStatus.stat == ftFileStatus::PQIFILE_INIT) if (mFileStatus.stat == ftFileStatus::PQIFILE_INIT)
mFileStatus.stat = ftFileStatus::PQIFILE_DOWNLOADING; mFileStatus.stat = ftFileStatus::PQIFILE_DOWNLOADING;
if (mFileStatus.stat == ftFileStatus::PQIFILE_CHECKING)
return false ;
if (mFileStatus.stat != ftFileStatus::PQIFILE_DOWNLOADING) if (mFileStatus.stat != ftFileStatus::PQIFILE_DOWNLOADING)
{ {
if (mFileStatus.stat == ftFileStatus::PQIFILE_FAIL_CANCEL) if (mFileStatus.stat == ftFileStatus::PQIFILE_FAIL_CANCEL)
@ -411,6 +408,9 @@ bool ftTransferModule::queryInactive()
return false; return false;
} }
if (mFileStatus.stat == ftFileStatus::PQIFILE_CHECKING)
return false ;
std::map<std::string,peerInfo>::iterator mit; std::map<std::string,peerInfo>::iterator mit;
for(mit = mFileSources.begin(); mit != mFileSources.end(); mit++) for(mit = mFileSources.begin(); mit != mFileSources.end(); mit++)
{ {
@ -522,8 +522,14 @@ class HashThread: public RsThread
virtual void run() virtual void run()
{ {
#ifdef FT_DEBUG
std::cerr << "hash thread is running for file " << std::endl;
#endif
std::string tmphash ;
_m->hashReceivedData(tmphash) ;
RsStackMutex stack(_hashThreadMtx) ; RsStackMutex stack(_hashThreadMtx) ;
_m->hashReceivedData(_hash) ; _hash = tmphash ;
_finished = true ; _finished = true ;
} }
std::string hash() std::string hash()
@ -575,6 +581,8 @@ bool ftTransferModule::checkFile()
std::string check_hash( _hash_thread->hash() ) ; std::string check_hash( _hash_thread->hash() ) ;
_hash_thread->join(); // allow releasing of resources when finished.
delete _hash_thread ; delete _hash_thread ;
_hash_thread = NULL ; _hash_thread = NULL ;