diff --git a/src/network/socket/qlocalsocket_win.cpp b/src/network/socket/qlocalsocket_win.cpp index df319d2c1e9..5d0fdfb0238 100644 --- a/src/network/socket/qlocalsocket_win.cpp +++ b/src/network/socket/qlocalsocket_win.cpp @@ -337,6 +337,8 @@ void QLocalSocketPrivate::_q_pipeClosed() return; } + serverName.clear(); + fullServerName.clear(); pipeReader->stop(); delete pipeWriter; pipeWriter = nullptr; @@ -403,11 +405,11 @@ void QLocalSocket::disconnectFromServer() { Q_D(QLocalSocket); - if (bytesToWrite() != 0) { + if (bytesToWrite() == 0) { + d->_q_pipeClosed(); + } else if (d->state != QLocalSocket::ClosingState) { d->state = QLocalSocket::ClosingState; emit stateChanged(d->state); - } else { - close(); } } @@ -444,8 +446,8 @@ void QLocalSocketPrivate::_q_bytesWritten(qint64 bytes) QScopedValueRollback guard(emittedBytesWritten, true); emit q->bytesWritten(bytes); } - if (state == QLocalSocket::ClosingState && pipeWriterBytesToWrite() == 0) - q->close(); + if (state == QLocalSocket::ClosingState) + q->disconnectFromServer(); } qintptr QLocalSocket::socketDescriptor() const diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index 308b2a70d12..261e738955a 100644 --- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -4604,10 +4604,6 @@ void tst_QNetworkReply::ioPutToFileFromLocalSocket() QNetworkReplyPtr reply(manager.put(QNetworkRequest(url), passive)); passive->setParent(reply.data()); -#ifdef Q_OS_WIN - if (!data.isEmpty()) - QEXPECT_FAIL("", "QTBUG-18385", Abort); -#endif QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply)); QCOMPARE(reply->error(), QNetworkReply::NoError); diff --git a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp index 74132416b71..83cecdda6b5 100644 --- a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp +++ b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp @@ -1369,6 +1369,7 @@ void tst_QLocalSocket::delayedDisconnect() QCOMPARE(socket.state(), QLocalSocket::ClosingState); QVERIFY(socket.waitForDisconnected(3000)); QCOMPARE(socket.state(), QLocalSocket::UnconnectedState); + QVERIFY(socket.isOpen()); } void tst_QLocalSocket::removeServer()