data: indexer processes

* TaskBuildIndex starts seperate indexer processes and communicates via shared memory
* indexer processes get restarted if they fail
* indexer processes are killed when the app closes or crashes
* added utility class SharedMemory to allocate and access shared memory, providing basic data structures
* added SharedMemoryGarbageCollector for keeping track of running instances and cleaning up shared memory in case of a crash
* show errors for source files that crashed during indexing
* added basic exception handling to task scheduling
* added option to turn off processes and use threads in preferences, but still use shared memory

fortune cookie message = Good news from someone dear is coming soon.
This commit is contained in:
Eberhard Graether
2017-05-04 15:50:59 +02:00
parent 9beea94fd8
commit 706119ebcc
109 changed files with 3351 additions and 1261 deletions
+21 -4
View File
@@ -1,5 +1,8 @@
#include "utility/scheduling/TaskRunner.h"
#include "utility/logging/logging.h"
#include "utility/scheduling/TaskScheduler.h"
TaskRunner::TaskRunner(std::shared_ptr<Task> task)
: m_task(task)
, m_reset(false)
@@ -12,13 +15,27 @@ TaskRunner::~TaskRunner()
Task::TaskState TaskRunner::update(std::shared_ptr<Blackboard> blackboard)
{
if (m_reset)
try
{
m_task->reset(blackboard);
m_reset = false;
if (m_reset)
{
m_task->reset(blackboard);
m_reset = false;
}
return m_task->update(blackboard);
}
catch (std::exception& e)
{
LOG_ERROR(e.what());
}
catch (...)
{
LOG_ERROR("Unknown exception thrown during task running");
}
return m_task->update(blackboard);
TaskScheduler::getInstance()->terminateRunningTasks();
return Task::STATE_FAILURE;
}
void TaskRunner::reset()