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) ...@@ -86,6 +86,8 @@ void BluetoothLink::disconnect(void)
} }
#endif #endif
if(_targetSocket) { 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->deleteLater();
_targetSocket = nullptr; _targetSocket = nullptr;
emit disconnected(); emit disconnected();
......
...@@ -79,6 +79,8 @@ void SerialLink::_writeBytes(const QByteArray data) ...@@ -79,6 +79,8 @@ void SerialLink::_writeBytes(const QByteArray data)
void SerialLink::disconnect(void) void SerialLink::disconnect(void)
{ {
if (_port) { 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->close();
_port->deleteLater(); _port->deleteLater();
_port = nullptr; _port = nullptr;
......
...@@ -106,6 +106,8 @@ void TCPLink::disconnect(void) ...@@ -106,6 +106,8 @@ void TCPLink::disconnect(void)
quit(); quit();
wait(); wait();
if (_socket) { 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; _socketIsConnected = false;
_socket->disconnectFromHost(); // Disconnect tcp _socket->disconnectFromHost(); // Disconnect tcp
_socket->waitForDisconnected(); _socket->waitForDisconnected();
......
...@@ -222,6 +222,8 @@ void UDPLink::disconnect(void) ...@@ -222,6 +222,8 @@ void UDPLink::disconnect(void)
quit(); quit();
wait(); wait();
if (_socket) { 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 // Make sure delete happen on correct thread
_socket->deleteLater(); _socket->deleteLater();
_socket = nullptr; _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