the cache is corrected and saved

This commit is contained in:
zapek 2019-04-06 00:15:01 +02:00
parent 683e3579aa
commit 3f8611f40f
3 changed files with 35 additions and 9 deletions

View File

@ -133,12 +133,7 @@ void HashStorage::data_tick()
if(!mChanged) // otherwise it might prevent from saving the hash cache
{
std::cerr << "Stopping hashing thread." << std::endl;
shutdown();
mRunning = false ;
mTotalSizeToHash = 0;
mTotalFilesToHash = 0;
std::cerr << "done." << std::endl;
stopHashThread();
}
RsServer::notify()->notifyHashingInfo(NOTIFY_HASHTYPE_FINISH, "") ;
@ -261,6 +256,16 @@ bool HashStorage::requestHash(const std::string& full_path,uint64_t size,rstime_
{
it->second.time_stamp = now ;
#ifdef WINDOWS_SYS
if(it->second.modf_stamp != (uint64_t)mod_time)
{
std::cerr << "(WW) detected a 1 hour shift in file modification time. This normally happens to many files at once, when daylight saving time shifts (file=\"" << full_path << "\")." << std::endl;
it->second.modf_stamp = (uint64_t)mod_time;
mChanged = true;
startHashThread();
}
#endif
known_hash = it->second.hash;
#ifdef HASHSTORAGE_DEBUG
std::cerr << "Found in cache." << std::endl ;
@ -293,6 +298,13 @@ bool HashStorage::requestHash(const std::string& full_path,uint64_t size,rstime_
mTotalSizeToHash += size ;
++mTotalFilesToHash;
startHashThread();
return false;
}
void HashStorage::startHashThread()
{
if(!mRunning)
{
mRunning = true ;
@ -300,10 +312,21 @@ bool HashStorage::requestHash(const std::string& full_path,uint64_t size,rstime_
mHashCounter = 0;
mTotalHashedSize = 0;
start("fs hash cache") ;
start("fs hash cache") ;
}
}
return false;
void HashStorage::stopHashThread()
{
if (mRunning)
{
std::cerr << "Stopping hashing thread." << std::endl;
shutdown();
mRunning = false ;
mTotalSizeToHash = 0;
mTotalFilesToHash = 0;
std::cerr << "done." << std::endl;
}
}
void HashStorage::clean()

View File

@ -97,6 +97,9 @@ private:
*/
void clean() ;
void startHashThread();
void stopHashThread();
// loading/saving the entire hash database to a file
void locked_save() ;

View File

@ -201,7 +201,7 @@ void RsThread::start(const std::string &threadName)
if(threadName.length() > 15)
{
#ifdef DEBUG_THREADS
THREAD_DEBUG << "RsThread::start called with to long name '" << name << "' truncating..." << std::endl;
THREAD_DEBUG << "RsThread::start called with to long name '" << threadName << "' truncating..." << std::endl;
#endif
RS_pthread_setname_np(mTid, threadName.substr(0, 15).c_str());
} else {