summaryrefslogtreecommitdiffstats
path: root/src/network/socket
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2010-06-15 05:38:54 (GMT)
committerSimon Hausmann <simon.hausmann@nokia.com>2010-06-15 05:38:54 (GMT)
commit37d71b2653b9f31ee73fdd09b0d2be757d4537bd (patch)
tree5877aa8f77e34db7ab6d9c58180d32952c65b49c /src/network/socket
parenteaa981c943293bf346a041aa4ad3d254e99ebd78 (diff)
parentdd2be9c7e7540870ddc532f02bd83860273cbbd6 (diff)
downloadQt-37d71b2653b9f31ee73fdd09b0d2be757d4537bd.zip
Qt-37d71b2653b9f31ee73fdd09b0d2be757d4537bd.tar.gz
Qt-37d71b2653b9f31ee73fdd09b0d2be757d4537bd.tar.bz2
Merge branch '4.6' of scm.dev.nokia.troll.no:qt/qt into qt-4.7-from-4.6
Diffstat (limited to 'src/network/socket')
-rw-r--r--src/network/socket/qlocalsocket_win.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/network/socket/qlocalsocket_win.cpp b/src/network/socket/qlocalsocket_win.cpp
index 2223ebe..5486f47 100644
--- a/src/network/socket/qlocalsocket_win.cpp
+++ b/src/network/socket/qlocalsocket_win.cpp
@@ -485,6 +485,8 @@ void QLocalSocketPrivate::_q_notified()
if (!completeAsyncRead()) {
pipeClosed = true;
emit q->readChannelFinished();
+ if (actualReadBufferSize == 0)
+ QTimer::singleShot(0, q, SLOT(_q_pipeClosed()));
return;
}
startAsyncRead();
@@ -568,11 +570,22 @@ bool QLocalSocket::waitForReadyRead(int msecs)
if (d->state != QLocalSocket::ConnectedState)
return false;
+ // We already know that the pipe is gone, but did not enter the event loop yet.
+ if (d->pipeClosed) {
+ close();
+ return false;
+ }
+
Q_ASSERT(d->readSequenceStarted);
DWORD result = WaitForSingleObject(d->overlapped.hEvent, msecs == -1 ? INFINITE : msecs);
switch (result) {
case WAIT_OBJECT_0:
d->_q_notified();
+ // We just noticed that the pipe is gone.
+ if (d->pipeClosed) {
+ close();
+ return false;
+ }
return true;
case WAIT_TIMEOUT:
return false;