diff options
Diffstat (limited to 'src/corelib/io')
-rw-r--r-- | src/corelib/io/qprocess_win.cpp | 21 | ||||
-rw-r--r-- | src/corelib/io/qwindowspipereader.cpp | 16 |
2 files changed, 18 insertions, 19 deletions
diff --git a/src/corelib/io/qprocess_win.cpp b/src/corelib/io/qprocess_win.cpp index 65422659b0..e557d10453 100644 --- a/src/corelib/io/qprocess_win.cpp +++ b/src/corelib/io/qprocess_win.cpp @@ -359,22 +359,15 @@ void QProcessPrivate::destroyPipe(Q_PIPE pipe[2]) } } -template <class T> -void deleteWorker(T *&worker) -{ - if (!worker) - return; - worker->stop(); - worker->deleteLater(); - worker = nullptr; -} - void QProcessPrivate::closeChannel(Channel *channel) { - if (channel == &stdinChannel) - deleteWorker(channel->writer); - else - deleteWorker(channel->reader); + if (channel == &stdinChannel) { + delete channel->writer; + channel->writer = nullptr; + } else { + delete channel->reader; + channel->reader = nullptr; + } destroyPipe(channel->pipe); } diff --git a/src/corelib/io/qwindowspipereader.cpp b/src/corelib/io/qwindowspipereader.cpp index d1a1782529..4d2f008eeb 100644 --- a/src/corelib/io/qwindowspipereader.cpp +++ b/src/corelib/io/qwindowspipereader.cpp @@ -41,6 +41,7 @@ #include "qwindowspipereader_p.h" #include <qcoreapplication.h> #include <QMutexLocker> +#include <QPointer> QT_BEGIN_NAMESPACE @@ -425,12 +426,17 @@ bool QWindowsPipeReader::consumePendingAndEmit(bool allowWinActPosting) if (state != Running) return false; - if (emitReadyRead) - emit readyRead(); - if (emitPipeClosed) { - if (dwError != ERROR_BROKEN_PIPE && dwError != ERROR_PIPE_NOT_CONNECTED) + if (!emitPipeClosed) { + if (emitReadyRead) + emit readyRead(); + } else { + QPointer<QWindowsPipeReader> alive(this); + if (emitReadyRead) + emit readyRead(); + if (alive && dwError != ERROR_BROKEN_PIPE && dwError != ERROR_PIPE_NOT_CONNECTED) emit winError(dwError, QLatin1String("QWindowsPipeReader::consumePendingAndEmit")); - emit pipeClosed(); + if (alive) + emit pipeClosed(); } return emitReadyRead; |