From: Romain Forlot Date: Tue, 23 May 2017 22:46:43 +0000 (+0200) Subject: Fix memory leaks X-Git-Tag: 5.0.2~178 X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=commitdiff_plain;ds=inline;h=ab4d52b65359c571267c71244578321580520c20;p=apps%2Fagl-service-can-low-level.git Fix memory leaks Change-Id: I4a33b6d5f1f3b73af113aff62b024329b0ed5288 Signed-off-by: Romain Forlot --- diff --git a/CAN-binder/low-can-binding/binding/low-can-cb.cpp b/CAN-binder/low-can-binding/binding/low-can-cb.cpp index 9e85f5c7..0dcff1df 100644 --- a/CAN-binder/low-can-binding/binding/low-can-cb.cpp +++ b/CAN-binder/low-can-binding/binding/low-can-cb.cpp @@ -50,6 +50,8 @@ void on_no_clients(std::string message) if( adr != nullptr) configuration_t::instance().get_diagnostic_manager().cleanup_request(adr, true); } + delete diag_req; + diag_req = nullptr; } static void push_n_notify(const can_message_t& cm) @@ -207,6 +209,8 @@ static int subscribe_unsubscribe_signals(struct afb_req request, bool subscribe, diag_m.cleanup_request( diag_m.find_recurring_request(diag_req), true); WARNING(binder_interface, "%s: signal: %s isn't supported. Canceling operation.", __FUNCTION__, sig->get_name().c_str()); + delete diag_req; + diag_req = nullptr; return -1; } diff --git a/CAN-binder/low-can-binding/diagnostic/active-diagnostic-request.cpp b/CAN-binder/low-can-binding/diagnostic/active-diagnostic-request.cpp index e9f0cd10..35a6c562 100644 --- a/CAN-binder/low-can-binding/diagnostic/active-diagnostic-request.cpp +++ b/CAN-binder/low-can-binding/diagnostic/active-diagnostic-request.cpp @@ -82,6 +82,13 @@ active_diagnostic_request_t::active_diagnostic_request_t(const std::string& bus, timeout_clock_{frequency_clock_t(10)} {} +active_diagnostic_request_t::~active_diagnostic_request_t() +{ + socket_.close(); + delete handle_; + handle_ = nullptr; +} + uint32_t active_diagnostic_request_t::get_id() const { return id_; diff --git a/CAN-binder/low-can-binding/diagnostic/active-diagnostic-request.hpp b/CAN-binder/low-can-binding/diagnostic/active-diagnostic-request.hpp index c295bed3..a1b8ab5b 100644 --- a/CAN-binder/low-can-binding/diagnostic/active-diagnostic-request.hpp +++ b/CAN-binder/low-can-binding/diagnostic/active-diagnostic-request.hpp @@ -95,6 +95,7 @@ public: const std::string& name, bool wait_for_multiple_responses, const DiagnosticResponseDecoder decoder, const DiagnosticResponseCallback callback, float frequencyHz); + ~active_diagnostic_request_t(); uint32_t get_id() const; DiagnosticRequestHandle* get_handle(); diff --git a/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp b/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp index 4f4b842e..49013f8e 100644 --- a/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp +++ b/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp @@ -232,6 +232,8 @@ void diagnostic_manager_t::find_and_erase(active_diagnostic_request_t* entry, st void diagnostic_manager_t::cancel_request(active_diagnostic_request_t* entry) { entry->get_socket().close(); + delete entry; + entry = nullptr; } /// @brief Cleanup a specific request if it isn't running and get complete. As it is almost