X-Git-Url: https://git.siccegge.de//index.cgi?p=frida%2Ffrida.git;a=blobdiff_plain;f=src%2Fcore%2FInformationManager.cxx;h=604425e617499fa5155e3db8d84f40af49448824;hp=4a48bae3c7070b12f0dbcd7551d28f9e88081fd0;hb=66b8dcbe36a247620e2eebb1bcb29c3fc4c3bd51;hpb=edf204645cccc7dfd4b2558f0fe6ab17675e6e2d diff --git a/src/core/InformationManager.cxx b/src/core/InformationManager.cxx index 4a48bae..604425e 100644 --- a/src/core/InformationManager.cxx +++ b/src/core/InformationManager.cxx @@ -4,7 +4,6 @@ #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" @@ -29,6 +28,7 @@ InformationManager::InformationManager() } InformationManager::~InformationManager() { + disassemblerThread.quit(); for (auto b : blocks) delete b.second; @@ -37,14 +37,23 @@ InformationManager::~InformationManager() { for (auto i : plugins) delete i; + disassemblerThread.wait(); } void InformationManager::reset(const std::string& filename) { this->filename = filename; disassembler.reset(createLLVMDisassembler(filename, this)); - emit resetEvent(); - 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) { @@ -272,7 +281,7 @@ void InformationManager::finishFunction(Function* fun) { blocks.insert(std::make_pair(bl->getStartAddress(), bl)); } NewFunctionEvent event(fun->getStartAddress(), fun); - emit newFunctionEvent(&event); + emit newFunctionEvent(event); } void InformationManager::finishBasicBlock(BasicBlock*) {