diff --git a/src/indexer/main.cpp b/src/indexer/main.cpp index 38eff6b2..da2443b0 100644 --- a/src/indexer/main.cpp +++ b/src/indexer/main.cpp @@ -29,6 +29,13 @@ void setupLogging(const std::string logFilePath) logManager->addLogger(fileLogger); } +void suppressCrashMessage() +{ +#ifdef _WIN32 + SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX); +#endif // _WIN32 +} + int main(int argc, char *argv[]) { QCoreApplication qtApp(argc, argv); @@ -68,6 +75,7 @@ int main(int argc, char *argv[]) UserPaths::setUserDataPath(FilePath(userDataPath)); setupLogging(logFilePath); + suppressCrashMessage(); ApplicationSettings* appSettings = ApplicationSettings::getInstance().get(); appSettings->load(FilePath(UserPaths::getAppSettingsPath())); diff --git a/src/lib/data/indexer/TaskBuildIndex.cpp b/src/lib/data/indexer/TaskBuildIndex.cpp index fb10fc78..060b5d84 100644 --- a/src/lib/data/indexer/TaskBuildIndex.cpp +++ b/src/lib/data/indexer/TaskBuildIndex.cpp @@ -43,6 +43,8 @@ TaskBuildIndex::TaskBuildIndex( void TaskBuildIndex::doEnter(std::shared_ptr blackboard) { + updateIndexingDialog(blackboard, FilePath()); + { std::lock_guard lock(blackboard->getMutex()); blackboard->set("indexer_count", (int)m_processCount); @@ -177,7 +179,7 @@ void TaskBuildIndex::runIndexerProcess(int processId, const std::string& logFile return; } - std::string command = indexerProcessPath.str(); + std::string command = "\"" + indexerProcessPath.str() + "\""; command += " " + std::to_string(processId); command += " " + Application::getUUID(); command += " \"" + AppPath::getAppPath() + "\""; diff --git a/src/lib/utility/interprocess/SharedMemoryGarbageCollector.cpp b/src/lib/utility/interprocess/SharedMemoryGarbageCollector.cpp index ea485475..44538e65 100644 --- a/src/lib/utility/interprocess/SharedMemoryGarbageCollector.cpp +++ b/src/lib/utility/interprocess/SharedMemoryGarbageCollector.cpp @@ -45,7 +45,7 @@ void SharedMemoryGarbageCollector::run(const std::string& uuid) m_uuid = uuid; - std::thread( + m_thread = std::make_shared( [this]() { m_loopIsRunning = true; @@ -57,7 +57,7 @@ void SharedMemoryGarbageCollector::run(const std::string& uuid) std::this_thread::sleep_for(std::chrono::seconds(s_updateIntervalSeconds)); } } - ).detach(); + ); } void SharedMemoryGarbageCollector::stop() @@ -66,6 +66,9 @@ void SharedMemoryGarbageCollector::stop() m_loopIsRunning = false; + m_thread->join(); + m_thread.reset(); + { std::lock_guard lock(m_sharedMemoryNamesMutex); m_removedSharedMemoryNames.insert(m_sharedMemoryNames.begin(), m_sharedMemoryNames.end()); diff --git a/src/lib/utility/interprocess/SharedMemoryGarbageCollector.h b/src/lib/utility/interprocess/SharedMemoryGarbageCollector.h index e857360c..5ddc7f81 100644 --- a/src/lib/utility/interprocess/SharedMemoryGarbageCollector.h +++ b/src/lib/utility/interprocess/SharedMemoryGarbageCollector.h @@ -1,6 +1,7 @@ #ifndef SHARED_MEMORY_GARBAGE_COLLECTOR_H #define SHARED_MEMORY_GARBAGE_COLLECTOR_H +#include #include #include #include @@ -38,6 +39,7 @@ private: SharedMemory m_memory; volatile bool m_loopIsRunning; + std::shared_ptr m_thread; std::string m_uuid; diff --git a/src/lib_gui/platform_includes/includesWindows.h b/src/lib_gui/platform_includes/includesWindows.h index bd1a1366..f722da45 100644 --- a/src/lib_gui/platform_includes/includesWindows.h +++ b/src/lib_gui/platform_includes/includesWindows.h @@ -30,7 +30,7 @@ void setupApp(int argc, char *argv[]) { path += "Sourcetrail/"; } - UserPaths::setUserDataPath(path); + UserPaths::setUserDataPath(FilePath(path)); #else std::string path = QDir::currentPath().toStdString(); path += "/user/"; @@ -41,20 +41,20 @@ void setupApp(int argc, char *argv[]) #ifdef DEPLOY // try to find files in Coati installation to migrate to Sourcetrail - FilePath coatiUserDataPath = UserPaths::getUserDataPath() + "../"; + FilePath coatiUserDataPath = UserPaths::getUserDataPath().concat(FilePath("../")); if (utility::getApplicationArchitectureType() == APPLICATION_ARCHITECTURE_X86_64) { - coatiUserDataPath = coatiUserDataPath.concat("Coati 64-bit"); + coatiUserDataPath = coatiUserDataPath.concat(FilePath("Coati 64-bit")); } else { - coatiUserDataPath = coatiUserDataPath.concat("Coati"); + coatiUserDataPath = coatiUserDataPath.concat(FilePath("Coati")); } if (coatiUserDataPath.exists()) { - FileSystem::copyFile(coatiUserDataPath.concat("ApplicationSettings.xml"), UserPaths::getAppSettingsPath()); - FileSystem::copyFile(coatiUserDataPath.concat("window_settings.ini"), UserPaths::getWindowSettingsPath()); + FileSystem::copyFile(coatiUserDataPath.concat(FilePath("ApplicationSettings.xml")), UserPaths::getAppSettingsPath()); + FileSystem::copyFile(coatiUserDataPath.concat(FilePath("window_settings.ini")), UserPaths::getWindowSettingsPath()); } #endif