Don't call TaskHub::addTask() directly from non-main thread

Fixes: QTCREATORBUG-26335
Change-Id: I23323edd32fa1f8d5d49943e3b4c37a305e53dd2
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Jarek Kobus
2021-09-29 11:42:07 +02:00
parent 34cdffa89b
commit b798fce465
2 changed files with 13 additions and 5 deletions

View File

@@ -155,6 +155,7 @@ void TaskHub::addTask(Task task)
QTC_ASSERT(!task.description().isEmpty(), return);
QTC_ASSERT(!task.isNull(), return);
QTC_ASSERT(task.m_mark.isNull(), return);
QTC_ASSERT(QThread::currentThread() == qApp->thread(), return);
if (task.file.isEmpty() || task.line <= 0)
task.line = -1;

View File

@@ -58,15 +58,22 @@ ProMessageHandler::~ProMessageHandler()
Core::MessageManager::writeFlashing(m_messages);
}
static void addTask(Task::TaskType type,
const QString &description,
const Utils::FilePath &file = {},
int line = -1)
{
QMetaObject::invokeMethod(TaskHub::instance(), [=]() {
TaskHub::addTask(BuildSystemTask(type, description, file, line));
});
}
void ProMessageHandler::message(int type, const QString &msg, const QString &fileName, int lineNo)
{
if ((type & CategoryMask) == ErrorMessage && ((type & SourceMask) == SourceParser || m_verbose)) {
// parse error in qmake files
if (m_exact) {
TaskHub::addTask(
BuildSystemTask(Task::Error, msg, Utils::FilePath::fromString(fileName), lineNo));
addTask(Task::Error, msg, Utils::FilePath::fromString(fileName), lineNo);
} else {
appendMessage(format(fileName, lineNo, msg));
}
@@ -79,9 +86,9 @@ void ProMessageHandler::fileMessage(int type, const QString &msg)
if (!m_verbose)
return;
if (m_exact && type == QMakeHandler::ErrorMessage)
TaskHub::addTask(BuildSystemTask(Task::Error, msg));
addTask(Task::Error, msg);
else if (m_exact && type == QMakeHandler::WarningMessage)
TaskHub::addTask(BuildSystemTask(Task::Warning, msg));
addTask(Task::Warning, msg);
else
appendMessage(msg);
}