diff options
author | Jarek Kobus <jaroslaw.kobus@qt.io> | 2022-05-23 10:16:39 +0200 |
---|---|---|
committer | Jarek Kobus <jaroslaw.kobus@qt.io> | 2022-05-31 11:27:14 +0000 |
commit | fc2f3983bc40184a855401871ab894c903a3f212 (patch) | |
tree | f380f88264b5a3f69cae955a7f7f7f353f384461 | |
parent | 9b5c8448f02da7dd6d444823c45d2c85be8fb5d4 (diff) |
QtcProcess: Don't merge ready read signals
We store pointers to signal objects inside m_signals list,
so we can't easily merge the old ready read signal with
the new one, since when flushing the m_signals from the main thread
we are taking copy of m_signals, but this copy still holds
the pointers to the original objects, and using them outside
of locked mutex isn't safe.
The possible solution would be to store simple data structures
instead of signal objects allocated on heap. However, there is
not really much gain of merging the ready read signals, so we
get rid of it.
Task-number: QTCREATORBUG-27578
Change-Id: Idd19a6fc1ebb4ccab1e4e367cfeb3f2f02a35512
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
-rw-r--r-- | src/libs/utils/launchersocket.cpp | 14 |
1 files changed, 0 insertions, 14 deletions
diff --git a/src/libs/utils/launchersocket.cpp b/src/libs/utils/launchersocket.cpp index c232579e20d..d2ee1cf19fd 100644 --- a/src/libs/utils/launchersocket.cpp +++ b/src/libs/utils/launchersocket.cpp @@ -83,10 +83,6 @@ public: , m_stdErr(stdErr) {} QByteArray stdOut() const { return m_stdOut; } QByteArray stdErr() const { return m_stdErr; } - void mergeWith(ReadyReadSignal *newSignal) { - m_stdOut += newSignal->stdOut(); - m_stdErr += newSignal->stdErr(); - } private: QByteArray m_stdOut; QByteArray m_stdErr; @@ -268,16 +264,6 @@ void CallerHandle::appendSignal(LauncherSignal *launcherSignal) QMutexLocker locker(&m_mutex); QTC_ASSERT(isCalledFromLaunchersThread(), return); - // Merge ReadyRead signals into one. - if (launcherSignal->signalType() == CallerHandle::SignalType::ReadyRead - && !m_signals.isEmpty() - && m_signals.last()->signalType() == CallerHandle::SignalType::ReadyRead) { - ReadyReadSignal *lastSignal = static_cast<ReadyReadSignal *>(m_signals.last()); - ReadyReadSignal *newSignal = static_cast<ReadyReadSignal *>(launcherSignal); - lastSignal->mergeWith(newSignal); - delete newSignal; - return; - } m_signals.append(launcherSignal); } |