diff --git a/libraries/AP_RCProtocol/AP_RCProtocol.cpp b/libraries/AP_RCProtocol/AP_RCProtocol.cpp index faa310b92f..85f456ec9f 100644 --- a/libraries/AP_RCProtocol/AP_RCProtocol.cpp +++ b/libraries/AP_RCProtocol/AP_RCProtocol.cpp @@ -37,6 +37,17 @@ void AP_RCProtocol::init() backend[AP_RCProtocol::ST24] = new AP_RCProtocol_ST24(*this); } +AP_RCProtocol::~AP_RCProtocol() +{ + for (uint8_t i = 0; i < AP_RCProtocol::NONE; i++) { + if (backend[i] != nullptr) { + delete backend[i]; + backend[i] = nullptr; + } + } + instance = nullptr; +} + void AP_RCProtocol::process_pulse(uint32_t width_s0, uint32_t width_s1) { uint32_t now = AP_HAL::millis(); diff --git a/libraries/AP_RCProtocol/AP_RCProtocol.h b/libraries/AP_RCProtocol/AP_RCProtocol.h index 8a4aa840c7..7e3032736b 100644 --- a/libraries/AP_RCProtocol/AP_RCProtocol.h +++ b/libraries/AP_RCProtocol/AP_RCProtocol.h @@ -28,6 +28,7 @@ public: AP_RCProtocol() { instance = this; } + ~AP_RCProtocol(); enum rcprotocol_t { PPM = 0, SBUS, diff --git a/libraries/AP_RCProtocol/AP_RCProtocol_Backend.h b/libraries/AP_RCProtocol/AP_RCProtocol_Backend.h index 3ab3fa40e5..b2efec064a 100644 --- a/libraries/AP_RCProtocol/AP_RCProtocol_Backend.h +++ b/libraries/AP_RCProtocol/AP_RCProtocol_Backend.h @@ -24,6 +24,7 @@ class AP_RCProtocol_Backend { public: AP_RCProtocol_Backend(AP_RCProtocol &_frontend); + virtual ~AP_RCProtocol_Backend() {} virtual void process_pulse(uint32_t width_s0, uint32_t width_s1) {} virtual void process_byte(uint8_t byte, uint32_t baudrate) {} uint16_t read(uint8_t chan);