diff -r cc75c76972ee -r c0432d11811c src/network/socket/qlocalsocket_win.cpp --- a/src/network/socket/qlocalsocket_win.cpp Wed Apr 21 12:15:23 2010 +0300 +++ b/src/network/socket/qlocalsocket_win.cpp Wed Apr 21 20:15:53 2010 +0300 @@ -39,7 +39,6 @@ ** ****************************************************************************/ -#include "qlocalsocket.h" #include "qlocalsocket_p.h" #include @@ -425,6 +424,15 @@ void QLocalSocket::disconnectFromServer() { Q_D(QLocalSocket); + + // Are we still connected? + if (!isValid()) { + // If we have unwritten data, the pipeWriter is still present. + // It must be destroyed before close() to prevent an infinite loop. + delete d->pipeWriter; + d->pipeWriter = 0; + } + flush(); if (d->pipeWriter && d->pipeWriter->bytesToWrite() != 0) { d->state = QLocalSocket::ClosingState;