diff --git a/src/app/main.cpp b/src/app/main.cpp index f2ef1da2..7fc4571c 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -21,7 +21,7 @@ #include "FileLogger.h" #include "logging.h" #include "LogManager.h" -#include "MessageInterruptTasks.h" +#include "MessageIndexingInterrupted.h" #include "MessageLoadProject.h" #include "MessageStatus.h" #include "ResourcePaths.h" @@ -37,8 +37,8 @@ void signalHandler(int signum) { - std::cout << "interrupt running tasks" << std::endl; - MessageInterruptTasks().dispatch(); + std::cout << "interrupt indexing" << std::endl; + MessageIndexingInterrupted().dispatch(); } void setupLogging() diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index 9d094eed..fe5473f4 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -455,6 +455,7 @@ add_files( utility/messaging/type/history/MessageHistoryUndo.h utility/messaging/type/indexing/MessageIndexingFinished.h + utility/messaging/type/indexing/MessageIndexingInterrupted.h utility/messaging/type/indexing/MessageIndexingShowDialog.h utility/messaging/type/indexing/MessageIndexingStarted.h utility/messaging/type/indexing/MessageIndexingStatus.h @@ -494,7 +495,6 @@ add_files( utility/messaging/type/MessageGraphNodeHide.h utility/messaging/type/MessageGraphNodeMove.h utility/messaging/type/MessageIDECreateCDB.h - utility/messaging/type/MessageInterruptTasks.h utility/messaging/type/MessageLoadProject.h utility/messaging/type/MessageLogFilterChanged.h utility/messaging/type/MessageMoveIDECursor.h diff --git a/src/lib/data/TaskInjectStorage.cpp b/src/lib/data/TaskInjectStorage.cpp index 3cae84d6..0cef697f 100644 --- a/src/lib/data/TaskInjectStorage.cpp +++ b/src/lib/data/TaskInjectStorage.cpp @@ -41,3 +41,8 @@ void TaskInjectStorage::doExit(std::shared_ptr blackboard) void TaskInjectStorage::doReset(std::shared_ptr blackboard) { } + +void TaskInjectStorage::handleMessage(MessageIndexingInterrupted* message) +{ + m_storageProvider->clear(); +} diff --git a/src/lib/data/TaskInjectStorage.h b/src/lib/data/TaskInjectStorage.h index a2ccc349..6876b8ad 100644 --- a/src/lib/data/TaskInjectStorage.h +++ b/src/lib/data/TaskInjectStorage.h @@ -3,6 +3,8 @@ #include +#include "MessageIndexingInterrupted.h" +#include "MessageListener.h" #include "Task.h" class Storage; @@ -10,6 +12,7 @@ class StorageProvider; class TaskInjectStorage : public Task + , public MessageListener { public: TaskInjectStorage( @@ -23,6 +26,8 @@ private: void doExit(std::shared_ptr blackboard) override; void doReset(std::shared_ptr blackboard) override; + void handleMessage(MessageIndexingInterrupted* message) override; + std::shared_ptr m_storageProvider; std::weak_ptr m_target; }; diff --git a/src/lib/data/indexer/TaskBuildIndex.cpp b/src/lib/data/indexer/TaskBuildIndex.cpp index 73f51bb6..b5c73cbd 100644 --- a/src/lib/data/indexer/TaskBuildIndex.cpp +++ b/src/lib/data/indexer/TaskBuildIndex.cpp @@ -125,7 +125,10 @@ void TaskBuildIndex::doExit(std::shared_ptr blackboard) } m_processThreads.clear(); - while (fetchIntermediateStorages(blackboard)); + if (!m_interrupted) + { + while (fetchIntermediateStorages(blackboard)); + } std::vector crashedFiles = m_interprocessIndexingStatusManager.getCrashedSourceFilePaths(); if (crashedFiles.size()) @@ -156,14 +159,14 @@ void TaskBuildIndex::terminate() utility::killRunningProcesses(); } -void TaskBuildIndex::handleMessage(MessageInterruptTasks* message) +void TaskBuildIndex::handleMessage(MessageIndexingInterrupted* message) { - if (!m_dialogView->dialogsHidden()) - { - LOG_INFO("sending indexer interrupt command."); - m_interprocessIndexingStatusManager.setIndexingInterrupted(true); - m_interrupted = true; - } + LOG_INFO("sending indexer interrupt command."); + + m_interprocessIndexingStatusManager.setIndexingInterrupted(true); + m_interrupted = true; + + m_dialogView->showUnknownProgressDialog(L"Interrupting Indexing", L"Waiting for indexer\nthreads to finish"); } void TaskBuildIndex::runIndexerProcess(int processId, const std::wstring& logFilePath) diff --git a/src/lib/data/indexer/TaskBuildIndex.h b/src/lib/data/indexer/TaskBuildIndex.h index aee1b6be..f568cc59 100644 --- a/src/lib/data/indexer/TaskBuildIndex.h +++ b/src/lib/data/indexer/TaskBuildIndex.h @@ -4,7 +4,7 @@ #include #include "MessageListener.h" -#include "MessageInterruptTasks.h" +#include "MessageIndexingInterrupted.h" #include "Task.h" #include "InterprocessIndexerCommandManager.h" @@ -17,7 +17,7 @@ class IndexerCommandList; class TaskBuildIndex : public Task - , public MessageListener + , public MessageListener { public: TaskBuildIndex( @@ -35,7 +35,7 @@ protected: void doReset(std::shared_ptr blackboard) override; void terminate() override; - void handleMessage(MessageInterruptTasks* message) override; + void handleMessage(MessageIndexingInterrupted* message) override; void runIndexerProcess(int processId, const std::wstring& logFilePath); void runIndexerThread(int processId); diff --git a/src/lib/data/indexer/TaskFillIndexerCommandQueue.cpp b/src/lib/data/indexer/TaskFillIndexerCommandQueue.cpp index 633dc36e..b9f46604 100644 --- a/src/lib/data/indexer/TaskFillIndexerCommandQueue.cpp +++ b/src/lib/data/indexer/TaskFillIndexerCommandQueue.cpp @@ -106,7 +106,7 @@ void TaskFillIndexerCommandsQueue::terminate() m_interrupted = true; } -void TaskFillIndexerCommandsQueue::handleMessage(MessageInterruptTasks* message) +void TaskFillIndexerCommandsQueue::handleMessage(MessageIndexingInterrupted* message) { std::lock_guard lock(m_commandsMutex); diff --git a/src/lib/data/indexer/TaskFillIndexerCommandQueue.h b/src/lib/data/indexer/TaskFillIndexerCommandQueue.h index 2caddc77..f44d05c0 100644 --- a/src/lib/data/indexer/TaskFillIndexerCommandQueue.h +++ b/src/lib/data/indexer/TaskFillIndexerCommandQueue.h @@ -4,7 +4,7 @@ #include #include "MessageListener.h" -#include "MessageInterruptTasks.h" +#include "MessageIndexingInterrupted.h" #include "Task.h" #include "InterprocessIndexerCommandManager.h" @@ -13,7 +13,7 @@ class IndexerCommandProvider; class TaskFillIndexerCommandsQueue : public Task - , public MessageListener + , public MessageListener { public: TaskFillIndexerCommandsQueue( @@ -29,7 +29,7 @@ protected: void doReset(std::shared_ptr blackboard) override; void terminate() override; - void handleMessage(MessageInterruptTasks* message) override; + void handleMessage(MessageIndexingInterrupted* message) override; bool fillCommandQueue(); diff --git a/src/lib/data/indexer/interprocess/InterprocessIndexer.cpp b/src/lib/data/indexer/interprocess/InterprocessIndexer.cpp index d3ff8b48..6976b9cd 100644 --- a/src/lib/data/indexer/interprocess/InterprocessIndexer.cpp +++ b/src/lib/data/indexer/interprocess/InterprocessIndexer.cpp @@ -60,7 +60,7 @@ void InterprocessIndexer::work() LOG_INFO(std::to_wstring(m_processId) + L" fetched indexer command for \"" + indexerCommand->getSourceFilePath().wstr() + L"\""); LOG_INFO(std::to_wstring(m_processId) + L" indexer commands left: " + std::to_wstring(m_interprocessIndexerCommandManager.indexerCommandCount() + 1)); - while (true) + while (updaterThreadRunning) { const size_t storageCount = m_interprocessIntermediateStorageManager.getIntermediateStorageCount(); if (storageCount < 2) @@ -73,6 +73,11 @@ void InterprocessIndexer::work() std::this_thread::sleep_for(std::chrono::milliseconds(200)); } + if (!updaterThreadRunning) + { + break; + } + LOG_INFO_STREAM(<< m_processId << " updating indexer status with currently indexed filepath"); m_interprocessIndexingStatusManager.startIndexingSourceFile(indexerCommand->getSourceFilePath()); diff --git a/src/lib/data/storage/StorageProvider.cpp b/src/lib/data/storage/StorageProvider.cpp index 0241c9b9..a4666312 100644 --- a/src/lib/data/storage/StorageProvider.cpp +++ b/src/lib/data/storage/StorageProvider.cpp @@ -8,6 +8,12 @@ int StorageProvider::getStorageCount() const return m_storages.size(); } +void StorageProvider::clear() +{ + std::lock_guard lock(m_storagesMutex); + return m_storages.clear(); +} + void StorageProvider::insert(std::shared_ptr storage) { const std::size_t storageSize = storage->getSourceLocationCount(); diff --git a/src/lib/data/storage/StorageProvider.h b/src/lib/data/storage/StorageProvider.h index b6ab4968..bd1dbd71 100644 --- a/src/lib/data/storage/StorageProvider.h +++ b/src/lib/data/storage/StorageProvider.h @@ -11,6 +11,8 @@ class StorageProvider public: int getStorageCount() const; + void clear(); + void insert(std::shared_ptr storage); // returns empty shared_ptr if no storages available diff --git a/src/lib/utility/messaging/type/MessageInterruptTasks.h b/src/lib/utility/messaging/type/MessageInterruptTasks.h deleted file mode 100644 index c08cc4cf..00000000 --- a/src/lib/utility/messaging/type/MessageInterruptTasks.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef MESSAGE_INTERRUPT_TASKS_H -#define MESSAGE_INTERRUPT_TASKS_H - -#include "Message.h" - -class MessageInterruptTasks: - public Message -{ -public: - MessageInterruptTasks() - { - setSendAsTask(false); - } - - static const std::string getStaticType() - { - return "MessageInterruptTasks"; - } -}; - -#endif // MESSAGE_INTERRUPT_TASKS_H diff --git a/src/lib/utility/messaging/type/indexing/MessageIndexingInterrupted.h b/src/lib/utility/messaging/type/indexing/MessageIndexingInterrupted.h new file mode 100644 index 00000000..3c425686 --- /dev/null +++ b/src/lib/utility/messaging/type/indexing/MessageIndexingInterrupted.h @@ -0,0 +1,16 @@ +#ifndef MESSAGE_INDEXING_INTERRUPTED_H +#define MESSAGE_INDEXING_INTERRUPTED_H + +#include "Message.h" + +class MessageIndexingInterrupted + : public Message +{ +public: + static const std::string getStaticType() + { + return "MessageIndexingInterrupted"; + } +}; + +#endif // MESSAGE_INDEXING_INTERRUPTED_H diff --git a/src/lib_gui/qt/view/QtDialogView.cpp b/src/lib_gui/qt/view/QtDialogView.cpp index ee53a4ea..ca7d6737 100644 --- a/src/lib_gui/qt/view/QtDialogView.cpp +++ b/src/lib_gui/qt/view/QtDialogView.cpp @@ -497,25 +497,6 @@ void QtDialogView::handleMessage(MessageIndexingShowDialog* message) ); } -void QtDialogView::handleMessage(MessageInterruptTasks* message) -{ - if (!m_dialogsVisible) - { - return; - } - - m_onQtThread3( - [=]() - { - QtIndexingDialog* window = dynamic_cast(m_windowStack.getTopWindow()); - if (window && window->getType() == QtIndexingDialog::DIALOG_INDEXING) - { - showUnknownProgressDialog(L"Interrupting Indexing", L"Waiting for indexer\nthreads to finish"); - } - } - ); -} - void QtDialogView::handleMessage(MessageErrorCountUpdate* message) { ErrorCountInfo errorInfo = message->errorCount; diff --git a/src/lib_gui/qt/view/QtDialogView.h b/src/lib_gui/qt/view/QtDialogView.h index 2bf12c05..548d04e0 100644 --- a/src/lib_gui/qt/view/QtDialogView.h +++ b/src/lib_gui/qt/view/QtDialogView.h @@ -9,7 +9,6 @@ #include "MessageListener.h" #include "MessageErrorCountUpdate.h" #include "MessageIndexingShowDialog.h" -#include "MessageInterruptTasks.h" #include "MessageWindowClosed.h" class QtIndexingDialog; @@ -21,7 +20,6 @@ class QtDialogView , public DialogView , public MessageListener , public MessageListener - , public MessageListener , public MessageListener { Q_OBJECT @@ -63,7 +61,6 @@ private slots: private: void handleMessage(MessageErrorCountUpdate* message) override; void handleMessage(MessageIndexingShowDialog* message) override; - void handleMessage(MessageInterruptTasks* message) override; void handleMessage(MessageWindowClosed* message) override; void updateErrorCount(size_t errorCount, size_t fatalCount); diff --git a/src/lib_gui/qt/window/QtIndexingDialog.cpp b/src/lib_gui/qt/window/QtIndexingDialog.cpp index 9df2877a..7183ac90 100644 --- a/src/lib_gui/qt/window/QtIndexingDialog.cpp +++ b/src/lib_gui/qt/window/QtIndexingDialog.cpp @@ -9,7 +9,7 @@ #include "QtHelpButton.h" #include "QtProgressBar.h" #include "MessageErrorsHelpMessage.h" -#include "MessageInterruptTasks.h" +#include "MessageIndexingInterrupted.h" #include "ResourcePaths.h" #include "utility.h" @@ -404,7 +404,10 @@ void QtIndexingDialog::handleClose() { if (m_type == DIALOG_INDEXING) { - MessageInterruptTasks().dispatch(); + if (isVisible()) + { + MessageIndexingInterrupted().dispatch(); + } return; } diff --git a/src/lib_gui/qt/window/QtMainWindow.cpp b/src/lib_gui/qt/window/QtMainWindow.cpp index 884d23cf..d575e1a9 100644 --- a/src/lib_gui/qt/window/QtMainWindow.cpp +++ b/src/lib_gui/qt/window/QtMainWindow.cpp @@ -41,7 +41,6 @@ #include "MessageEnteredLicense.h" #include "MessageFind.h" #include "MessageIndexingShowDialog.h" -#include "MessageInterruptTasks.h" #include "MessageLoadProject.h" #include "MessageRefresh.h" #include "MessageRefreshUI.h" @@ -493,7 +492,6 @@ void QtMainWindow::keyPressEvent(QKeyEvent* event) break; case Qt::Key_Escape: - MessageInterruptTasks().dispatch(); emit hideScreenSearch(); break;