Fix: make no clients event works with CAN subscription
authorRomain Forlot <romain.forlot@iot.bzh>
Mon, 3 Apr 2017 22:07:16 +0000 (00:07 +0200)
committerRomain Forlot <romain.forlot@iot.bzh>
Tue, 11 Apr 2017 10:41:42 +0000 (12:41 +0200)
Is there is no diagnostic message corresponding then do nothing

Change-Id: Ib6627b3c10b1b7a0a46d41323a6623efe808a015
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
src/configuration.cpp
src/low-can-binding.cpp

index 32cb00c..8a50cbc 100644 (file)
@@ -114,7 +114,9 @@ diagnostic_message_t* configuration_t::get_diagnostic_message(std::string messag
 {
        std::vector<diagnostic_message_t*> 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.
index 8fc143c..bcbfc2c 100644 (file)
@@ -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);
+       }
 }
 
 ///******************************************************************************