From 71096ceee301ebc450aacb29d99190b3e158753f Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Wed, 24 May 2017 01:38:00 +0200 Subject: Close diagnostic manager socket if there isn't any requests No need to listen diagnostic responses if there isn't any subscriptions. Change-Id: I7fa48dbc3e8fb1847b8186337fe2813625894406 Signed-off-by: Romain Forlot --- .../diagnostic/diagnostic-manager.cpp | 22 +++++++++++++++++++--- .../diagnostic/diagnostic-manager.hpp | 1 + 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp b/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp index 49013f8..31a3d23 100644 --- a/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp +++ b/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp @@ -214,6 +214,16 @@ DiagnosticShims& diagnostic_manager_t::get_shims() return shims_; } +bool diagnostic_manager_t::socket_close() +{ + if(non_recurring_requests_.empty() && recurring_requests_.empty()) + { + socket_.close(); + return true; + } + return false; +} + /// @brief Search for a specific active diagnostic request in the provided requests list /// and erase it from the vector. This is useful at unsubscription to clean up the list otherwize /// all received CAN messages will be passed to DiagnosticRequestHandle of all active diagnostic request @@ -251,16 +261,17 @@ void diagnostic_manager_t::cleanup_request(active_diagnostic_request_t* entry, b request_string, sizeof(request_string)); if(force && entry->get_recurring()) { - find_and_erase(entry, recurring_requests_); cancel_request(entry); + find_and_erase(entry, recurring_requests_); DEBUG(binder_interface, "%s: Cancelling completed, recurring request: %s", __FUNCTION__, request_string); } - else + else if (!entry->get_recurring()) { DEBUG(binder_interface, "%s: Cancelling completed, non-recurring request: %s", __FUNCTION__, request_string); - find_and_erase(entry, non_recurring_requests_); cancel_request(entry); + find_and_erase(entry, non_recurring_requests_); } + socket_close(); } } @@ -271,12 +282,17 @@ void diagnostic_manager_t::cleanup_request(active_diagnostic_request_t* entry, b void diagnostic_manager_t::cleanup_active_requests(bool force) { for(auto& entry : non_recurring_requests_) + { if (entry != nullptr) cleanup_request(entry, force); + } for(auto& entry : recurring_requests_) + { if (entry != nullptr) cleanup_request(entry, force); + } + } /// @brief Will return the active_diagnostic_request_t pointer for theDiagnosticRequest or nullptr if diff --git a/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.hpp b/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.hpp index d942b47..cc446c4 100644 --- a/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.hpp +++ b/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.hpp @@ -71,6 +71,7 @@ public: const std::string get_bus_device_name() const; active_diagnostic_request_t* get_last_recurring_requests() const; DiagnosticShims& get_shims(); + bool socket_close(); void find_and_erase(active_diagnostic_request_t* entry, std::vector& requests_list); void cancel_request(active_diagnostic_request_t* entry); -- cgit 1.2.3-korg