diff --git a/src/PositionManager/PositionManager.cpp b/src/PositionManager/PositionManager.cpp index 88c4e25200d4991d4cdafd853d70603ed920ca56..5de73d0f6e715a455e19de612c91dfbc486469e6 100644 --- a/src/PositionManager/PositionManager.cpp +++ b/src/PositionManager/PositionManager.cpp @@ -50,8 +50,19 @@ void QGCPositionManager::setToolbox(QGCToolbox *toolbox) void QGCPositionManager::setNmeaSourceDevice(QIODevice* device) { + // stop and release _nmeaSource if (_nmeaSource) { + _nmeaSource->stopUpdates(); + disconnect(_nmeaSource); + + // if _currentSource is pointing there, point to null + if (_currentSource == _nmeaSource){ + _currentSource = nullptr; + } + delete _nmeaSource; + _nmeaSource = nullptr; + } _nmeaSource = new QNmeaPositionInfoSource(QNmeaPositionInfoSource::RealTimeMode, this); _nmeaSource->setDevice(device);