diff --git a/src/comm/QGCXPlaneLink.cc b/src/comm/QGCXPlaneLink.cc index 98e7f63d999030193084c5c6754fc4666f7a0413..302ee598255151774d592e14618a4dd407d84eaa 100644 --- a/src/comm/QGCXPlaneLink.cc +++ b/src/comm/QGCXPlaneLink.cc @@ -80,12 +80,12 @@ QGCXPlaneLink::~QGCXPlaneLink() storeSettings(); // Tell the thread to exit _should_exit = true; - // Wait for it to exit - wait(); -// if(connectState) { -// disconnectSimulation(); -// } + if (socket) { + socket->close(); + socket->deleteLater(); + socket = NULL; + } } void QGCXPlaneLink::loadSettings() @@ -169,11 +169,13 @@ void QGCXPlaneLink::run() emit statusMessage("Binding socket failed!"); - delete socket; + socket->deleteLater(); socket = NULL; return; } + emit statusMessage(tr("Waiting for XPlane..")); + QObject::connect(socket, SIGNAL(readyRead()), this, SLOT(readBytes())); UAS* uas = dynamic_cast(mav); @@ -188,6 +190,9 @@ void QGCXPlaneLink::run() connect(this, SIGNAL(sensorHilRawImuChanged(quint64,float,float,float,float,float,float,float,float,float,float,float,float,float,quint32)), uas, SLOT(sendHilSensors(quint64,float,float,float,float,float,float,float,float,float,float,float,float,float,quint32)), Qt::QueuedConnection); uas->startHil(); + } else { + emit statusMessage(tr("Failed to connect to drone instance")); + return; } #pragma pack(push, 1) @@ -254,12 +259,16 @@ void QGCXPlaneLink::run() connectState = false; + QObject::disconnect(socket, SIGNAL(readyRead()), this, SLOT(readBytes())); + socket->close(); socket->deleteLater(); socket = NULL; emit simulationDisconnected(); emit simulationConnected(false); + + this->deleteLater(); } void QGCXPlaneLink::setPort(int localPort) @@ -908,7 +917,6 @@ bool QGCXPlaneLink::disconnectSimulation() if (connectState) { _should_exit = true; - wait(); } else { emit simulationDisconnected(); emit simulationConnected(false); diff --git a/src/uas/UAS.cc b/src/uas/UAS.cc index 957bc5004b36f562c6c45fbc46f544f5350bedbe..5d7cb24306dcf31b23f44a96ffe44c65e39bd7dc 100644 --- a/src/uas/UAS.cc +++ b/src/uas/UAS.cc @@ -242,6 +242,8 @@ UAS::UAS(MAVLinkProtocol* protocol, int id) : UASInterface(), */ UAS::~UAS() { + stopHil(); + simulation->deleteLater(); writeSettings(); }