Unverified Commit 4db32dd1 authored by Don Gagne's avatar Don Gagne Committed by GitHub

Prevent stale readBytes signalling to call into deleted objects (#9116)

parent f6c22144
......@@ -86,6 +86,8 @@ void BluetoothLink::disconnect(void)
}
#endif
if(_targetSocket) {
// This prevents stale signals from calling the link after it has been deleted
QObject::connect(_targetSocket, &QBluetoothSocket::readyRead, this, &BluetoothLink::readBytes);
_targetSocket->deleteLater();
_targetSocket = nullptr;
emit disconnected();
......
......@@ -79,6 +79,8 @@ void SerialLink::_writeBytes(const QByteArray data)
void SerialLink::disconnect(void)
{
if (_port) {
// This prevents stale signals from calling the link after it has been deleted
QObject::disconnect(_port, &QIODevice::readyRead, this, &SerialLink::_readBytes);
_port->close();
_port->deleteLater();
_port = nullptr;
......
......@@ -106,6 +106,8 @@ void TCPLink::disconnect(void)
quit();
wait();
if (_socket) {
// This prevents stale signal from calling the link after it has been deleted
QObject::connect(_socket, &QTcpSocket::readyRead, this, &TCPLink::readBytes);
_socketIsConnected = false;
_socket->disconnectFromHost(); // Disconnect tcp
_socket->waitForDisconnected();
......
......@@ -222,6 +222,8 @@ void UDPLink::disconnect(void)
quit();
wait();
if (_socket) {
// This prevents stale signal from calling the link after it has been deleted
QObject::disconnect(_socket, &QUdpSocket::readyRead, this, &UDPLink::readBytes);
// Make sure delete happen on correct thread
_socket->deleteLater();
_socket = nullptr;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment