summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/network/socket/qlocalsocket_tcp.cpp3
-rw-r--r--src/network/socket/qlocalsocket_unix.cpp3
-rw-r--r--tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp10
3 files changed, 14 insertions, 2 deletions
diff --git a/src/network/socket/qlocalsocket_tcp.cpp b/src/network/socket/qlocalsocket_tcp.cpp
index cc9df3bd17..7b3e7c2820 100644
--- a/src/network/socket/qlocalsocket_tcp.cpp
+++ b/src/network/socket/qlocalsocket_tcp.cpp
@@ -349,10 +349,11 @@ bool QLocalSocket::canReadLine() const
void QLocalSocket::close()
{
Q_D(QLocalSocket);
+
+ QIODevice::close();
d->tcpSocket->close();
d->serverName.clear();
d->fullServerName.clear();
- QIODevice::close();
}
bool QLocalSocket::waitForBytesWritten(int msecs)
diff --git a/src/network/socket/qlocalsocket_unix.cpp b/src/network/socket/qlocalsocket_unix.cpp
index 8f5da60553..21f4f92d15 100644
--- a/src/network/socket/qlocalsocket_unix.cpp
+++ b/src/network/socket/qlocalsocket_unix.cpp
@@ -531,6 +531,8 @@ bool QLocalSocket::canReadLine() const
void QLocalSocket::close()
{
Q_D(QLocalSocket);
+
+ QIODevice::close();
d->unixSocket.close();
d->cancelDelayedConnect();
if (d->connectingSocket != -1)
@@ -540,7 +542,6 @@ void QLocalSocket::close()
d->connectingOpenMode = { };
d->serverName.clear();
d->fullServerName.clear();
- QIODevice::close();
}
bool QLocalSocket::waitForBytesWritten(int msecs)
diff --git a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
index 42c634def6..5de1fa2b58 100644
--- a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
+++ b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
@@ -1370,12 +1370,22 @@ void tst_QLocalSocket::delayedDisconnect()
QVERIFY(server.waitForNewConnection(3000));
QLocalSocket *serverSocket = server.nextPendingConnection();
QVERIFY(serverSocket);
+ connect(serverSocket, &QLocalSocket::aboutToClose, [serverSocket]() {
+ QVERIFY(serverSocket->isOpen());
+ QVERIFY(serverSocket->getChar(nullptr));
+ });
+
QVERIFY(socket.putChar(0));
socket.disconnectFromServer();
QCOMPARE(socket.state(), QLocalSocket::ClosingState);
QVERIFY(socket.waitForDisconnected(3000));
QCOMPARE(socket.state(), QLocalSocket::UnconnectedState);
QVERIFY(socket.isOpen());
+
+ QVERIFY(serverSocket->waitForReadyRead(3000));
+ serverSocket->close();
+ QCOMPARE(serverSocket->state(), QLocalSocket::UnconnectedState);
+ QVERIFY(!serverSocket->isOpen());
}
void tst_QLocalSocket::removeServer()