Use more Utils::isMainThread()

Change-Id: Ia3c6f6dca53c5d7487b0813de16f06c52af47aa5
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Jarek Kobus
2022-10-10 15:59:26 +02:00
parent 862a3923f4
commit f5f3bbcc59
13 changed files with 37 additions and 46 deletions

View File

@@ -35,6 +35,7 @@
#include <utils/qtcassert.h>
#include <utils/qtcprocess.h>
#include <utils/qtcsettings.h>
#include <utils/threadutils.h>
#ifdef WITH_TESTS
#include <utils/hostosinfo.h>
@@ -851,7 +852,7 @@ bool PluginManager::finishScenario()
// Waits until the running scenario is fully initialized
void PluginManager::waitForScenarioFullyInitialized()
{
if (QThread::currentThread() == qApp->thread()) {
if (isMainThread()) {
qWarning("The waitForScenarioFullyInitialized() function can't be called from main thread.");
return;
}
@@ -1378,7 +1379,7 @@ void PluginManagerPrivate::shutdown()
#ifdef WITH_TESTS
if (PluginManager::isScenarioRunning("TestModelManagerInterface")) {
qDebug() << "Point 2: Expect the next call to Point 3 triggers a crash";
QThread::currentThread()->sleep(5);
QThread::sleep(5);
}
#endif
if (!allObjects.isEmpty()) {

View File

@@ -7,7 +7,6 @@
#include "qmljsinterpreter.h"
#include "qmljsmodelmanagerinterface.h"
#include "qmljsplugindumper.h"
#include "qmljstypedescriptionreader.h"
#include "qmljsdialect.h"
#include "qmljsviewercontext.h"
#include "qmljsutils.h"
@@ -989,7 +988,7 @@ void ModelManagerInterface::parseLoop(QSet<Utils::FilePath> &scannedPaths,
ExtensionSystem::PluginManager::waitForScenarioFullyInitialized();
if (ExtensionSystem::PluginManager::finishScenario()) {
qDebug() << "Point 1: Shutdown triggered";
QThread::currentThread()->sleep(2);
QThread::sleep(2);
qDebug() << "Point 3: If Point 2 was already reached, expect a crash now";
}
}

View File

@@ -4,6 +4,7 @@
#include "processreaper.h"
#include "processutils.h"
#include "qtcassert.h"
#include "threadutils.h"
#include <QCoreApplication>
#include <QDebug>
@@ -224,7 +225,7 @@ ProcessReaper::ProcessReaper()
ProcessReaper::~ProcessReaper()
{
QTC_CHECK(QThread::currentThread() == qApp->thread());
QTC_CHECK(isMainThread());
QMutexLocker locker(&s_instanceMutex);
instance()->m_private->waitForFinished();
m_thread.quit();

View File

@@ -12,6 +12,7 @@
#include "processreaper.h"
#include "processutils.h"
#include "terminalprocess_p.h"
#include "threadutils.h"
#include <QCoreApplication>
#include <QDebug>
@@ -62,25 +63,25 @@ public:
timer.start();
auto cleanup = qScopeGuard([this, &timer] {
const qint64 currentNsecs = timer.nsecsElapsed();
const bool isMainThread = QThread::currentThread() == qApp->thread();
const bool mainThread = isMainThread();
const int hitThisAll = m_hitThisAll.fetch_add(1) + 1;
const int hitAllAll = m_hitAllAll.fetch_add(1) + 1;
const int hitThisMain = isMainThread
const int hitThisMain = mainThread
? m_hitThisMain.fetch_add(1) + 1
: m_hitThisMain.load();
const int hitAllMain = isMainThread
const int hitAllMain = mainThread
? m_hitAllMain.fetch_add(1) + 1
: m_hitAllMain.load();
const qint64 totalThisAll = toMs(m_totalThisAll.fetch_add(currentNsecs) + currentNsecs);
const qint64 totalAllAll = toMs(m_totalAllAll.fetch_add(currentNsecs) + currentNsecs);
const qint64 totalThisMain = toMs(isMainThread
const qint64 totalThisMain = toMs(mainThread
? m_totalThisMain.fetch_add(currentNsecs) + currentNsecs
: m_totalThisMain.load());
const qint64 totalAllMain = toMs(isMainThread
const qint64 totalAllMain = toMs(mainThread
? m_totalAllMain.fetch_add(currentNsecs) + currentNsecs
: m_totalAllMain.load());
printMeasurement(QLatin1String(m_functionName), hitThisAll, toMs(currentNsecs),
totalThisAll, hitAllAll, totalAllAll, isMainThread,
totalThisAll, hitAllAll, totalAllAll, mainThread,
hitThisMain, totalThisMain, hitAllMain, totalAllMain);
});
return std::invoke(std::forward<Function>(function), std::forward<Args>(args)...);
@@ -1212,7 +1213,7 @@ void QtcProcess::setRemoteProcessHooks(const DeviceProcessHooks &hooks)
static bool askToKill(const QString &command)
{
#ifdef QT_GUI_LIB
if (QThread::currentThread() != QCoreApplication::instance()->thread())
if (!isMainThread())
return true;
const QString title = QtcProcess::tr("Process Not Responding");
QString msg = command.isEmpty() ?
@@ -1775,13 +1776,6 @@ void QtcProcess::setWriteData(const QByteArray &writeData)
d->m_setup.m_writeData = writeData;
}
#ifdef QT_GUI_LIB
static bool isGuiThread()
{
return QThread::currentThread() == QCoreApplication::instance()->thread();
}
#endif
void QtcProcess::runBlocking(EventLoopMode eventLoopMode)
{
// Attach a dynamic property with info about blocking type
@@ -1802,7 +1796,7 @@ void QtcProcess::runBlocking(EventLoopMode eventLoopMode)
timer.setInterval(1000);
timer.start();
#ifdef QT_GUI_LIB
if (isGuiThread())
if (isMainThread())
QApplication::setOverrideCursor(Qt::WaitCursor);
#endif
QEventLoop eventLoop(this);
@@ -1812,7 +1806,7 @@ void QtcProcess::runBlocking(EventLoopMode eventLoopMode)
d->m_eventLoop = nullptr;
timer.stop();
#ifdef QT_GUI_LIB
if (isGuiThread())
if (isMainThread())
QApplication::restoreOverrideCursor();
#endif
}

View File

@@ -3,10 +3,9 @@
#include "qtcassert.h"
#include "singleton.h"
#include "threadutils.h"
#include <QCoreApplication>
#include <QList>
#include <QThread>
#include <unordered_map>
@@ -45,7 +44,7 @@ SingletonStaticData &Singleton::staticData(std::type_index index)
// only.
void Singleton::deleteAll()
{
QTC_ASSERT(QThread::currentThread() == qApp->thread(), return);
QTC_ASSERT(isMainThread(), return);
QList<Singleton *> oldList;
{
QMutexLocker locker(&s_mutex);

View File

@@ -119,7 +119,7 @@ void StringTablePrivate::GC(QFutureInterface<void> &futureInterface)
#ifdef WITH_TESTS
if (ExtensionSystem::PluginManager::isScenarioRunning("TestStringTable")) {
if (ExtensionSystem::PluginManager::finishScenario())
QThread::currentThread()->sleep(5);
QThread::sleep(5);
}
#endif

View File

@@ -3,11 +3,9 @@
#include "projectnodes.h"
#include "buildconfiguration.h"
#include "buildsystem.h"
#include "project.h"
#include "projectexplorerconstants.h"
#include "projecttree.h"
#include "target.h"
#include <coreplugin/icore.h>
@@ -21,14 +19,12 @@
#include <utils/pointeralgorithm.h>
#include <utils/qtcassert.h>
#include <utils/stringutils.h>
#include <utils/threadutils.h>
#include <utils/utilsicons.h>
#include <QDir>
#include <QFileInfo>
#include <QIcon>
#include <QStyle>
#include <QThread>
#include <QTimer>
#include <memory>
@@ -445,7 +441,7 @@ QString FolderNode::displayName() const
*/
QIcon FolderNode::icon() const
{
QTC_CHECK(QThread::currentThread() == QCoreApplication::instance()->thread());
QTC_CHECK(isMainThread());
// Instantiating the Icon provider is expensive.
if (auto strPtr = std::get_if<QString>(&m_icon)) {
@@ -1063,7 +1059,7 @@ DirectoryIcon::DirectoryIcon(const QString &overlay)
*/
QIcon DirectoryIcon::icon() const
{
QTC_CHECK(QThread::currentThread() == QCoreApplication::instance()->thread());
QTC_CHECK(isMainThread());
const auto it = m_cache.find(m_overlay);
if (it != m_cache.end())
return it.value();

View File

@@ -9,10 +9,10 @@
#include <texteditor/textmark.h>
#include <utils/qtcassert.h>
#include <utils/theme/theme.h>
#include <utils/threadutils.h>
#include <utils/utilsicons.h>
#include <QApplication>
#include <QThread>
using namespace Utils;
@@ -131,7 +131,7 @@ void TaskHub::addTask(Task::TaskType type, const QString &description, Utils::Id
void TaskHub::addTask(Task task)
{
if (QThread::currentThread() != qApp->thread()) {
if (!isMainThread()) {
QMetaObject::invokeMethod(qApp, [task = std::move(task)] {
TaskHub::addTask(task);
});

View File

@@ -6,6 +6,7 @@
#ifdef Q_OS_WIN
#include <utils/qtcassert.h>
#include <utils/threadutils.h>
#include <QCoreApplication>
#include <qt_windows.h>
@@ -146,7 +147,7 @@ void WinDebugInterface::emitReadySignal()
void WinDebugInterface::dispatchDebugOutput()
{
// Called in the thread this object was created in, not in the WinDebugInterfaceThread.
QTC_ASSERT(QThread::currentThread() == QCoreApplication::instance()->thread(), return);
QTC_ASSERT(Utils::isMainThread(), return);
static size_t maxMessagesToSend = 100;
std::vector<std::pair<qint64, QString>> output;

View File

@@ -29,7 +29,6 @@
#include "nodeabstractproperty.h"
#include "nodeinstanceserverproxy.h"
#include "nodelistproperty.h"
#include "nodeproperty.h"
#include "pixmapchangedcommand.h"
#include "puppettocreatorcommand.h"
#include "qml3dnode.h"
@@ -84,19 +83,18 @@
#include <utils/qtcassert.h>
#include <utils/qtcprocess.h>
#include <utils/theme/theme.h>
#include <utils/threadutils.h>
#include <qtsupport/qtkitinformation.h>
#include <QUrl>
#include <QMultiHash>
#include <QTimerEvent>
#include <QPicture>
#include <QPainter>
#include <QDirIterator>
#include <QFileSystemWatcher>
#include <QMultiHash>
#include <QPainter>
#include <QPicture>
#include <QScopedPointer>
#include <QThread>
#include <QApplication>
#include <QTimerEvent>
#include <QUrl>
enum {
debug = false
@@ -261,7 +259,7 @@ void NodeInstanceView::modelAttached(Model *model)
// If model gets attached on non-main thread of the application, do not attempt to monitor
// file changes. Such models are typically short lived for specific purpose, and timers
// will not work at all, if the thread is not based on QThread.
if (QThread::currentThread() == qApp->thread()) {
if (Utils::isMainThread()) {
m_generateQsbFilesTimer.stop();
m_qsbTargets.clear();
updateQsbPathToFilterMap();

View File

@@ -28,10 +28,8 @@
#include <utils/parameteraction.h>
#include <utils/qtcassert.h>
#include <utils/stringutils.h>
#include <utils/threadutils.h>
#include <QAction>
#include <QCoreApplication>
#include <QDebug>
#include <QDialogButtonBox>
#include <QFormLayout>

View File

@@ -21,6 +21,8 @@ add_qtc_executable(qtcreator_processlauncher
${UTILSDIR}/qtcassert.h
${UTILSDIR}/singleton.cpp
${UTILSDIR}/singleton.h
${UTILSDIR}/threadutils.cpp
${UTILSDIR}/threadutils.h
)
if (MSVC)

View File

@@ -40,6 +40,8 @@ QtcTool {
"qtcassert.h",
"singleton.cpp",
"singleton.h",
"threadutils.cpp",
"threadutils.h",
]
}
}