summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/network/socket/qlocalsocket_win.cpp1
-rw-r--r--tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp19
2 files changed, 19 insertions, 1 deletions
diff --git a/src/network/socket/qlocalsocket_win.cpp b/src/network/socket/qlocalsocket_win.cpp
index bd299d6cf5..df319d2c1e 100644
--- a/src/network/socket/qlocalsocket_win.cpp
+++ b/src/network/socket/qlocalsocket_win.cpp
@@ -403,7 +403,6 @@ void QLocalSocket::disconnectFromServer()
{
Q_D(QLocalSocket);
- flush();
if (bytesToWrite() != 0) {
d->state = QLocalSocket::ClosingState;
emit stateChanged(d->state);
diff --git a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
index 165221bd42..74132416b7 100644
--- a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
+++ b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
@@ -120,6 +120,7 @@ private slots:
void waitForDisconnect();
void waitForDisconnectByServer();
void waitForReadyReadOnDisconnected();
+ void delayedDisconnect();
void removeServer();
@@ -1352,6 +1353,24 @@ void tst_QLocalSocket::waitForReadyReadOnDisconnected()
QVERIFY(timer.elapsed() < 2000);
}
+void tst_QLocalSocket::delayedDisconnect()
+{
+ QString name = "tst_localsocket";
+ LocalServer server;
+ QVERIFY(server.listen(name));
+ LocalSocket socket;
+ socket.connectToServer(name);
+ QVERIFY(socket.waitForConnected(3000));
+ QVERIFY(server.waitForNewConnection(3000));
+ QLocalSocket *serverSocket = server.nextPendingConnection();
+ QVERIFY(serverSocket);
+ QVERIFY(socket.putChar(0));
+ socket.disconnectFromServer();
+ QCOMPARE(socket.state(), QLocalSocket::ClosingState);
+ QVERIFY(socket.waitForDisconnected(3000));
+ QCOMPARE(socket.state(), QLocalSocket::UnconnectedState);
+}
+
void tst_QLocalSocket::removeServer()
{
// this is a hostile takeover, but recovering from a crash results in the same