diff options
author | Alex Trotsenko <alex1973tr@gmail.com> | 2021-09-21 19:55:39 +0300 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@gmx.de> | 2021-09-21 21:40:27 +0000 |
commit | a320b54bb670c3a9cbb44346ab092076f20ef82a (patch) | |
tree | a18b0397e4c5ea04725d357da4b31bbb1242fe14 | |
parent | 8910a01c7212e1fb2d5192b19ef6179dd1b7e456 (diff) |
QLocalSocket: reorder device closing
To allow reading from a slot connected to the aboutToClose() signal,
we should call QIODevice::close() just before closing the inner device.
This patch amends 21f3ff65b8df777b5726a68b09bbee39f1a893ec.
Pick-to: 6.2
Change-Id: Ic8cd00497e1bdf923b980c26e9ca874b77e82f89
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
-rw-r--r-- | src/network/socket/qlocalsocket_tcp.cpp | 3 | ||||
-rw-r--r-- | src/network/socket/qlocalsocket_unix.cpp | 3 | ||||
-rw-r--r-- | tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp | 10 |
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() |