From 2a54bee20b7fc97b67ff9549f0d1c9dd33d1a7f8 Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Sat, 24 Oct 2015 20:10:17 +0200 Subject: [PATCH] Simulators and firmwares unregistered when application ends (fixes memory leaks) --- companion/src/companion.cpp | 3 ++- companion/src/eeprominterface.cpp | 7 ------- companion/src/eeprominterface.h | 2 +- companion/src/firmwares/opentx/opentxinterface.cpp | 6 ++++++ companion/src/firmwares/opentx/opentxinterface.h | 1 + companion/src/simulation/simulatorinterface.cpp | 6 ++++++ companion/src/simulation/simulatorinterface.h | 1 + companion/src/simulator.cpp | 3 +++ 8 files changed, 20 insertions(+), 9 deletions(-) diff --git a/companion/src/companion.cpp b/companion/src/companion.cpp index 13dfaa5ef..51886611e 100644 --- a/companion/src/companion.cpp +++ b/companion/src/companion.cpp @@ -156,7 +156,8 @@ int main(int argc, char *argv[]) delete splash; delete mainWin; - unregisterFirmwares(); + unregisterSimulators(); + unregisterOpenTxFirmwares(); unregisterEEpromInterfaces(); #if defined(JOYSTICKS) || defined(SIMU_AUDIO) diff --git a/companion/src/eeprominterface.cpp b/companion/src/eeprominterface.cpp index f9655be3f..3c912622a 100644 --- a/companion/src/eeprominterface.cpp +++ b/companion/src/eeprominterface.cpp @@ -1642,13 +1642,6 @@ QList firmwares; Firmware * default_firmware_variant; Firmware * current_firmware_variant; -void unregisterFirmwares() -{ - foreach (Firmware * f, firmwares) { - delete f; - } -} - void ShowEepromErrors(QWidget *parent, const QString &title, const QString &mainMessage, unsigned long errorsFound) { std::bitset errors((unsigned long long)errorsFound); diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index 348cc7a39..41e1cf51f 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -1489,7 +1489,7 @@ inline void applyStickModeToModel(ModelData &model, unsigned int mode) void registerEEpromInterfaces(); void unregisterEEpromInterfaces(); void registerOpenTxFirmwares(); -void unregisterFirmwares(); +void unregisterOpenTxFirmwares(); enum EepromLoadErrors { NO_ERROR, diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp index e74feb378..d338d0ac4 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -1436,3 +1436,9 @@ void registerOpenTxFirmwares() current_firmware_variant = default_firmware_variant; } +void unregisterOpenTxFirmwares() +{ + foreach (Firmware * f, firmwares) { + delete f; + } +} diff --git a/companion/src/firmwares/opentx/opentxinterface.h b/companion/src/firmwares/opentx/opentxinterface.h index e7db6737a..e2f249ecb 100644 --- a/companion/src/firmwares/opentx/opentxinterface.h +++ b/companion/src/firmwares/opentx/opentxinterface.h @@ -130,5 +130,6 @@ class OpenTxFirmware: public Firmware { }; void registerOpenTxFirmwares(); +void unregisterOpenTxFirmwares(); #endif diff --git a/companion/src/simulation/simulatorinterface.cpp b/companion/src/simulation/simulatorinterface.cpp index cfb0fe358..6a0034a58 100644 --- a/companion/src/simulation/simulatorinterface.cpp +++ b/companion/src/simulation/simulatorinterface.cpp @@ -81,3 +81,9 @@ SimulatorFactory *getSimulatorFactory(const QString &name) return NULL; } +void unregisterSimulators() +{ + foreach(SimulatorFactory *factory, registered_simulators) { + delete factory; + } +} \ No newline at end of file diff --git a/companion/src/simulation/simulatorinterface.h b/companion/src/simulation/simulatorinterface.h index 48c67a4be..a19753ba6 100644 --- a/companion/src/simulation/simulatorinterface.h +++ b/companion/src/simulation/simulatorinterface.h @@ -118,6 +118,7 @@ class SimulatorFactory { }; void registerSimulators(); +void unregisterSimulators(); SimulatorFactory *getSimulatorFactory(const QString &name); extern QMap registered_simulators; diff --git a/companion/src/simulator.cpp b/companion/src/simulator.cpp index 45e22ffd8..e8b3fb653 100644 --- a/companion/src/simulator.cpp +++ b/companion/src/simulator.cpp @@ -176,6 +176,9 @@ int main(int argc, char *argv[]) delete dialog; + unregisterSimulators(); + unregisterOpenTxFirmwares(); + #if defined(JOYSTICKS) || defined(SIMU_AUDIO) SDL_Quit(); #endif