Browse Source

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

QGC4.4
Don Gagne 5 years ago committed by GitHub
parent
commit
4db32dd134
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      src/comm/BluetoothLink.cc
  2. 2
      src/comm/SerialLink.cc
  3. 2
      src/comm/TCPLink.cc
  4. 2
      src/comm/UDPLink.cc

2
src/comm/BluetoothLink.cc

@ -86,6 +86,8 @@ void BluetoothLink::disconnect(void) @@ -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();

2
src/comm/SerialLink.cc

@ -79,6 +79,8 @@ void SerialLink::_writeBytes(const QByteArray data) @@ -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;

2
src/comm/TCPLink.cc

@ -106,6 +106,8 @@ void TCPLink::disconnect(void) @@ -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();

2
src/comm/UDPLink.cc

@ -222,6 +222,8 @@ void UDPLink::disconnect(void) @@ -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;

Loading…
Cancel
Save