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 21f3ff65b8.
Pick-to: 6.2
Change-Id: Ic8cd00497e1bdf923b980c26e9ca874b77e82f89
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
bb10
parent
8910a01c72
commit
a320b54bb6
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Reference in New Issue