Commit ad2b968e authored by Tobias Hunger's avatar Tobias Hunger

ShellCommand: Fix crash with OutputProxy use

Pass a shared pointer into runSynchronous and runFullySynchronous.
That way the proxy will stay around for as long as needed.

Task-number: QTCREATORBUG-16612
Change-Id: Ic529440c81d85149abd67e5eeb564cc5f12181ab
Reviewed-by: default avatarTim Jenssen <tim.jenssen@theqtcompany.com>
parent 6f3bf106
......@@ -328,9 +328,9 @@ Utils::SynchronousProcessResponse ShellCommand::runCommand(const Utils::FileName
proxy->appendCommand(dir, binary, arguments);
if (d->m_flags & FullySynchronously || QThread::currentThread() == QCoreApplication::instance()->thread())
response = runFullySynchronous(binary, arguments, proxy.data(), timeoutS, dir, interpreter);
response = runFullySynchronous(binary, arguments, proxy, timeoutS, dir, interpreter);
else
response = runSynchronous(binary, arguments, proxy.data(), timeoutS, dir, interpreter);
response = runSynchronous(binary, arguments, proxy, timeoutS, dir, interpreter);
if (!d->m_aborted) {
// Success/Fail message in appropriate window?
......@@ -347,7 +347,7 @@ Utils::SynchronousProcessResponse ShellCommand::runCommand(const Utils::FileName
Utils::SynchronousProcessResponse ShellCommand::runFullySynchronous(const Utils::FileName &binary,
const QStringList &arguments,
OutputProxy *proxy,
QSharedPointer<OutputProxy> proxy,
int timeoutS,
const QString &workingDirectory,
const ExitCodeInterpreter &interpreter)
......@@ -387,7 +387,7 @@ Utils::SynchronousProcessResponse ShellCommand::runFullySynchronous(const Utils:
SynchronousProcessResponse ShellCommand::runSynchronous(const FileName &binary,
const QStringList &arguments,
OutputProxy *proxy,
QSharedPointer<OutputProxy> proxy,
int timeoutS,
const QString &workingDirectory,
const ExitCodeInterpreter &interpreter)
......
......@@ -168,12 +168,12 @@ private:
// Run without a event loop in fully blocking mode. No signals will be delivered.
SynchronousProcessResponse runFullySynchronous(const FileName &binary, const QStringList &arguments,
OutputProxy *proxy,
QSharedPointer<OutputProxy> proxy,
int timeoutS, const QString &workingDirectory,
const ExitCodeInterpreter &interpreter = defaultExitCodeInterpreter);
// Run with an event loop. Signals will be delivered.
SynchronousProcessResponse runSynchronous(const FileName &binary, const QStringList &arguments,
OutputProxy *proxy,
QSharedPointer<OutputProxy> proxy,
int timeoutS, const QString &workingDirectory,
const ExitCodeInterpreter &interpreter = defaultExitCodeInterpreter);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment