diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2010-06-15 05:38:54 (GMT) |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2010-06-15 05:38:54 (GMT) |
commit | 37d71b2653b9f31ee73fdd09b0d2be757d4537bd (patch) | |
tree | 5877aa8f77e34db7ab6d9c58180d32952c65b49c /src/network | |
parent | eaa981c943293bf346a041aa4ad3d254e99ebd78 (diff) | |
parent | dd2be9c7e7540870ddc532f02bd83860273cbbd6 (diff) | |
download | Qt-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')
-rw-r--r-- | src/network/socket/qlocalsocket_win.cpp | 13 |
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; |