forked from qt-creator/qt-creator
ProcessLauncher: Flush Done signal when waiting for started
After changing the protocol so that error signal is no more sent we need to flush the buffered Done signal when awaiting for Started signal. Change-Id: I274bfa375db05627348684f11be535d79c62b42b Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -116,7 +116,6 @@ bool CallerHandle::flushFor(SignalType signalType)
|
|||||||
{
|
{
|
||||||
QTC_ASSERT(isCalledFromCallersThread(), return {});
|
QTC_ASSERT(isCalledFromCallersThread(), return {});
|
||||||
QList<LauncherSignal *> oldSignals;
|
QList<LauncherSignal *> oldSignals;
|
||||||
QList<SignalType> flushedSignals;
|
|
||||||
{
|
{
|
||||||
QMutexLocker locker(&m_mutex);
|
QMutexLocker locker(&m_mutex);
|
||||||
const QList<SignalType> storedSignals =
|
const QList<SignalType> storedSignals =
|
||||||
@@ -124,18 +123,21 @@ bool CallerHandle::flushFor(SignalType signalType)
|
|||||||
return launcherSignal->signalType();
|
return launcherSignal->signalType();
|
||||||
});
|
});
|
||||||
|
|
||||||
// If we are flushing for Started, flush Started only
|
// If we are flushing for ReadyRead or Done - flush all.
|
||||||
const bool flushAll = (signalType != SignalType::Started);
|
// If we are flushing for Started:
|
||||||
|
// - if Started was buffered - flush Started only.
|
||||||
|
// - otherwise if Done signal was buffered - flush all.
|
||||||
|
const bool flushAll = (signalType != SignalType::Started)
|
||||||
|
|| (!storedSignals.contains(SignalType::Started)
|
||||||
|
&& storedSignals.contains(SignalType::Done));
|
||||||
if (flushAll) {
|
if (flushAll) {
|
||||||
oldSignals = m_signals;
|
oldSignals = m_signals;
|
||||||
m_signals = {};
|
m_signals = {};
|
||||||
flushedSignals = storedSignals;
|
|
||||||
} else {
|
} else {
|
||||||
auto matchingIndex = storedSignals.lastIndexOf(signalType);
|
auto matchingIndex = storedSignals.lastIndexOf(signalType);
|
||||||
if (matchingIndex >= 0) {
|
if (matchingIndex >= 0) {
|
||||||
oldSignals = m_signals.mid(0, matchingIndex + 1);
|
oldSignals = m_signals.mid(0, matchingIndex + 1);
|
||||||
m_signals = m_signals.mid(matchingIndex + 1);
|
m_signals = m_signals.mid(matchingIndex + 1);
|
||||||
flushedSignals = storedSignals.mid(0, matchingIndex + 1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user