From e7872a52aeb1a2c2d6c60fe61e1846f8e2c6eb88 Mon Sep 17 00:00:00 2001 From: LoRd_MuldeR Date: Wed, 16 Oct 2013 03:31:14 +0200 Subject: [PATCH] Small improvement in InitializationThread class. --- src/Thread_FileAnalyzer.cpp | 6 +++++- src/Thread_Initialization.cpp | 32 ++++++++++++++++++++++---------- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/Thread_FileAnalyzer.cpp b/src/Thread_FileAnalyzer.cpp index a10cbc84..4ac03b24 100644 --- a/src/Thread_FileAnalyzer.cpp +++ b/src/Thread_FileAnalyzer.cpp @@ -172,7 +172,11 @@ void FileAnalyzer::run() //Create thread pool if(!m_pool) m_pool = new QThreadPool(); - m_pool->setMaxThreadCount(qBound(2, ((QThread::idealThreadCount() * 3) / 2), 12)); + const int idealThreadCount = QThread::idealThreadCount(); + if(idealThreadCount > 0) + { + m_pool->setMaxThreadCount(qBound(2, ((idealThreadCount * 3) / 2), 12)); + } //Start first N threads QTimer::singleShot(0, this, SLOT(initializeTasks())); diff --git a/src/Thread_Initialization.cpp b/src/Thread_Initialization.cpp index 5af7da6b..bf3cd23a 100644 --- a/src/Thread_Initialization.cpp +++ b/src/Thread_Initialization.cpp @@ -57,13 +57,21 @@ public: static void clearFlags(void) { + s_mutex.lock(); s_bAbort = s_bCustom = false; s_errMsg[0] = '\0'; + s_mutex.unlock(); } - static bool getAbort(void) { return s_bAbort; } - static bool getCustom(void) { return s_bCustom; } - static char *const getError(void) { return s_errMsg; } + static bool getAbort(void) { bool ret; s_mutex.lock(); ret = s_bAbort; s_mutex.unlock(); return ret; } + static bool getCustom(void) { bool ret; s_mutex.lock(); ret = s_bCustom; s_mutex.unlock(); return ret; } + + static void getError(char *buffer, const size_t buffSize) + { + s_mutex.lock(); + strncpy_s(buffer, 1024, s_errMsg, _TRUNCATE); + s_mutex.unlock(); + } protected: void run(void) @@ -89,7 +97,7 @@ protected: if(lockedFile) { - QMutexLocker lock(&s_mutex); + //QMutexLocker lock(&s_mutex); lamexp_register_tool(m_toolShortName, lockedFile, version, &m_toolTag); } } @@ -99,7 +107,11 @@ protected: qWarning("At least one of the required tools could not be initialized:\n%s", errorMsg); if(s_mutex.tryLock()) { - if(!s_bAbort) { s_bAbort = true; strncpy_s(s_errMsg, 1024, errorMsg, _TRUNCATE); } + if(!s_bAbort) + { + strncpy_s(s_errMsg, 1024, errorMsg, _TRUNCATE); + s_bAbort = true; + } s_mutex.unlock(); } } @@ -110,8 +122,8 @@ private: const QString m_toolName; const QString m_toolShortName; const QString m_toolTag; - const QByteArray m_toolHash; const unsigned int m_toolVersion; + const QByteArray m_toolHash; static volatile bool s_bAbort; static volatile bool s_bCustom; @@ -163,8 +175,6 @@ void InitializationThread::run() //Hack to disable x64 on Wine, as x64 binaries won't run under Wine (tested with Wine 1.4 under Ubuntu 12.04 x64) if(cpuSupport & CPU_TYPE_X64_ALL) { - //DWORD osVerNo = lamexp_get_os_version(); - //if((HIWORD(osVerNo) == 6) && (LOWORD(osVerNo) == 2)) if(lamexp_detect_wine()) { qWarning("Running under Wine on a 64-Bit system. Going to disable all x64 support!\n"); @@ -214,7 +224,7 @@ void InitializationThread::run() QDir appDir = QDir(QCoreApplication::applicationDirPath()).canonicalPath(); QThreadPool *pool = new QThreadPool(); - int idealThreadCount = QThread::idealThreadCount(); + const int idealThreadCount = QThread::idealThreadCount(); if(idealThreadCount > 0) { pool->setMaxThreadCount(idealThreadCount * 2); @@ -265,7 +275,9 @@ void InitializationThread::run() //Make sure all files were extracted correctly if(ExtractorTask::getAbort()) { - qFatal("At least one of the required tools could not be initialized:\n%s", ExtractorTask::getError()); + char errorMsg[1024]; + ExtractorTask::getError(errorMsg, 1024); + qFatal("At least one of the required tools could not be initialized:\n%s", errorMsg); return; }