summaryrefslogtreecommitdiffstats
path: root/src/corelib/io/qwindowspipereader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/io/qwindowspipereader.cpp')
-rw-r--r--src/corelib/io/qwindowspipereader.cpp16
1 files changed, 11 insertions, 5 deletions
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;