From 3aa89d6f3d38ce0513d8698f2ae7b23f8c6edfb9 Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Tue, 4 Apr 2017 00:07:16 +0200 Subject: Fix: make no clients event works with CAN subscription Is there is no diagnostic message corresponding then do nothing Change-Id: Ib6627b3c10b1b7a0a46d41323a6623efe808a015 Signed-off-by: Romain Forlot --- src/configuration.cpp | 9 +++++++-- src/low-can-binding.cpp | 8 ++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/configuration.cpp b/src/configuration.cpp index 32cb00cd..8a50cbc4 100644 --- a/src/configuration.cpp +++ b/src/configuration.cpp @@ -114,7 +114,9 @@ diagnostic_message_t* configuration_t::get_diagnostic_message(std::string messag { std::vector found; configuration_t::instance().find_diagnostic_messages(build_DynamicField(message_name), found); - return found.front(); + if(! found.empty()) + return found.front(); + return nullptr; } DiagnosticRequest* configuration_t::get_request_from_diagnostic_message(diagnostic_message_t* diag_msg) const @@ -124,7 +126,10 @@ DiagnosticRequest* configuration_t::get_request_from_diagnostic_message(diagnost DiagnosticRequest* configuration_t::get_request_from_diagnostic_message(std::string message_name) const { - return new DiagnosticRequest(get_diagnostic_message(message_name)->build_diagnostic_request()); + diagnostic_message_t* diag_msg = get_diagnostic_message(message_name); + if( diag_msg != nullptr) + return new DiagnosticRequest(diag_msg->build_diagnostic_request()); + return nullptr; } /// @brief return signals name found searching through CAN signals list. diff --git a/src/low-can-binding.cpp b/src/low-can-binding.cpp index 8fc143c5..bcbfc2c0 100644 --- a/src/low-can-binding.cpp +++ b/src/low-can-binding.cpp @@ -48,8 +48,12 @@ const struct afb_binding_interface *binder_interface; void on_no_clients(std::string message) { DiagnosticRequest* diag_req = configuration_t::instance().get_request_from_diagnostic_message(message); - active_diagnostic_request_t* adr = configuration_t::instance().get_diagnostic_manager().find_recurring_request(diag_req); - configuration_t::instance().get_diagnostic_manager().cleanup_request(adr, true); + if(diag_req != nullptr) + { + active_diagnostic_request_t* adr = configuration_t::instance().get_diagnostic_manager().find_recurring_request(diag_req); + if( adr != nullptr) + configuration_t::instance().get_diagnostic_manager().cleanup_request(adr, true); + } } ///****************************************************************************** -- cgit 1.2.3-korg