From 0aa5b863005aece0bcabb90c35e9ef417a103c56 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 19 Apr 2024 15:45:58 +0200 Subject: [PATCH] Process: Detect a recursive call to waitForSignal() Assert that we don't call it recursively. If so, the waitForSignal() returns false immediately. Fixes: QTCREATORBUG-30715 Change-Id: I7195b2b1347f67262cc8ae6db5439f5ddd38b5bb Reviewed-by: Alessandro Portale --- src/libs/utils/process.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/libs/utils/process.cpp b/src/libs/utils/process.cpp index 802ae632f1a..d97fea174d4 100644 --- a/src/libs/utils/process.cpp +++ b/src/libs/utils/process.cpp @@ -769,6 +769,7 @@ private: std::unique_ptr m_processHandler; mutable QMutex m_mutex; QList m_signals; + Guard m_guard; }; class ProcessPrivate : public QObject @@ -961,6 +962,10 @@ GeneralProcessBlockingImpl::GeneralProcessBlockingImpl(ProcessPrivate *parent) bool GeneralProcessBlockingImpl::waitForSignal(ProcessSignalType newSignal, QDeadlineTimer timeout) { + QTC_ASSERT(!m_guard.isLocked(), qWarning("Process::waitForSignal() called recursively. " + "The call is being ignored."); return false); + GuardLocker locker(m_guard); + m_processHandler->setParent(nullptr); QThread thread;