#include "core/Function.hxx"
#include "core/BasicBlock.hxx"
#include "core/Comment.hxx"
-#include "core/events/NewFunctionEvent.hxx"
#include "core/events/ChangeCommentEvent.hxx"
#include "qt.hxx"
: logger(log4cxx::Logger::getLogger("core.InformationManager"))
{
current_information_manager = this;
+ qRegisterMetaType<NewFunctionEvent>("NewFunctionEvent");
QPluginLoader* loader = new QPluginLoader("libguilePlugin", NULL);
if (!loader->load())
}
InformationManager::~InformationManager() {
+ disassemblerThread.quit();
for (auto b : blocks)
delete b.second;
for (auto i : plugins)
delete i;
+ disassemblerThread.wait();
}
void InformationManager::reset(const std::string& filename) {
this->filename = filename;
disassembler.reset(createLLVMDisassembler(filename, this));
- if (disassembler.get() != NULL)
+ if (disassembler.get() != NULL) {
+ emit resetEvent();
+#ifndef CONFIG_TEST
+ disassembler.get()->moveToThread(&disassemblerThread);
+ connect(&disassemblerThread, &QThread::started,
+ disassembler.get(), &Disassembler::start);
+ disassemblerThread.start();
+#else
disassembler.get()->start();
+#endif
+ }
}
void InformationManager::load(const std::string& filename) {
blocks.insert(std::make_pair(bl->getStartAddress(), bl));
}
NewFunctionEvent event(fun->getStartAddress(), fun);
- Q_EMIT newFunctionEvent(&event);
+ emit newFunctionEvent(event);
}
void InformationManager::finishBasicBlock(BasicBlock*) {
void InformationManager::finishComment(Comment* c) {
LOG4CXX_DEBUG(logger, "Finishing comment " << c->getAddress());
ChangeCommentEvent event(c->getAddress(), c->getLocation(), c);
- Q_EMIT changeCommentEvent(&event);
+ emit changeCommentEvent(&event);
}
void InformationManager::deleteFunction(Function* f) {