From c37eb3de8a35259aebe9207761bf1e263a52476f Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 25 Apr 2015 11:34:50 -0700 Subject: [PATCH] Fix DDE shutdown --- interface/src/devices/DdeFaceTracker.cpp | 16 +++++++++++----- interface/src/devices/DdeFaceTracker.h | 3 ++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/interface/src/devices/DdeFaceTracker.cpp b/interface/src/devices/DdeFaceTracker.cpp index ef9ab6fdc6..741863abf4 100644 --- a/interface/src/devices/DdeFaceTracker.cpp +++ b/interface/src/devices/DdeFaceTracker.cpp @@ -144,6 +144,7 @@ DdeFaceTracker::DdeFaceTracker() : DdeFaceTracker::DdeFaceTracker(const QHostAddress& host, quint16 serverPort, quint16 controlPort) : _ddeProcess(NULL), + _ddeStopping(false), _host(host), _serverPort(serverPort), _controlPort(controlPort), @@ -196,6 +197,7 @@ void DdeFaceTracker::setEnabled(bool enabled) { if (enabled && !_ddeProcess) { // Terminate any existing DDE process, perhaps left running after an Interface crash _udpSocket.writeDatagram(DDE_EXIT_COMMAND, DDE_SERVER_ADDR, _controlPort); + _ddeStopping = false; qDebug() << "[Info] DDE Face Tracker Starting"; _ddeProcess = new QProcess(qApp); @@ -204,9 +206,8 @@ void DdeFaceTracker::setEnabled(bool enabled) { } if (!enabled && _ddeProcess) { + _ddeStopping = true; _udpSocket.writeDatagram(DDE_EXIT_COMMAND, DDE_SERVER_ADDR, _controlPort); - delete _ddeProcess; - _ddeProcess = NULL; qDebug() << "[Info] DDE Face Tracker Stopped"; } #endif @@ -214,11 +215,16 @@ void DdeFaceTracker::setEnabled(bool enabled) { void DdeFaceTracker::processFinished(int exitCode, QProcess::ExitStatus exitStatus) { if (_ddeProcess) { - // DDE crashed or was manually terminated - qDebug() << "[Info] DDE Face Tracker Stopped Unexpectedly"; + if (_ddeStopping) { + qCDebug(interfaceapp) << "DDE Face Tracker: Stopped"; + + } else { + qCWarning(interfaceapp) << "DDE Face Tracker: Stopped unexpectedly"; + Menu::getInstance()->setIsOptionChecked(MenuOption::NoFaceTracking, true); + } _udpSocket.close(); + delete _ddeProcess; _ddeProcess = NULL; - Menu::getInstance()->setIsOptionChecked(MenuOption::NoFaceTracking, true); } } diff --git a/interface/src/devices/DdeFaceTracker.h b/interface/src/devices/DdeFaceTracker.h index 302150773e..d9df5723cf 100644 --- a/interface/src/devices/DdeFaceTracker.h +++ b/interface/src/devices/DdeFaceTracker.h @@ -62,9 +62,10 @@ private slots: private: DdeFaceTracker(); DdeFaceTracker(const QHostAddress& host, quint16 serverPort, quint16 controlPort); - ~DdeFaceTracker(); + virtual ~DdeFaceTracker(); QProcess* _ddeProcess; + bool _ddeStopping; QHostAddress _host; quint16 _serverPort;