Remove pointer generator that make memory leaks.
authorRomain Forlot <romain.forlot@iot.bzh>
Fri, 2 Jun 2017 17:48:24 +0000 (19:48 +0200)
committerRomain Forlot <romain.forlot@iot.bzh>
Fri, 2 Jun 2017 17:48:24 +0000 (19:48 +0200)
Only have 1 place where to generate a pointer from a DiagnosticRequest
is in low-can-cb.cpp when subscribing. Else now using reference instead
of raw pointer.

Change-Id: I7fd2f3d30afa90017b945e6b711922036123b6d3
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
CAN-binder/low-can-binding/binding/application.cpp
CAN-binder/low-can-binding/binding/application.hpp
CAN-binder/low-can-binding/diagnostic/active-diagnostic-request.cpp
CAN-binder/low-can-binding/diagnostic/active-diagnostic-request.hpp
CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp
CAN-binder/low-can-binding/diagnostic/diagnostic-manager.hpp

index b916523..6e6353b 100644 (file)
@@ -76,21 +76,3 @@ void application_t::set_active_message_set(uint8_t id)
 {
        active_message_set_ = id;
 }
-
-
-std::shared_ptr<diagnostic_message_t> application_t::get_diagnostic_message(const std::string& message_name) const
-{
-       struct utils::signals_found found;
-        found = utils::signals_manager_t::instance().find_signals(build_DynamicField(message_name));
-       if(! found.diagnostic_messages.empty())
-               return found.diagnostic_messages.front();
-       return nullptr;
-}
-
-DiagnosticRequest* application_t::get_request_from_diagnostic_message(const std::string& message_name) const
-{
-       std::shared_ptr<diagnostic_message_t> diag_msg = get_diagnostic_message(message_name);
-       if( diag_msg != nullptr && diag_msg->get_supported())
-               return new DiagnosticRequest(diag_msg->build_diagnostic_request());
-       return nullptr;
-}
index 50b2375..5fa6478 100644 (file)
@@ -78,8 +78,6 @@ class application_t
 
                void set_active_message_set(uint8_t id);
 
-               std::shared_ptr<diagnostic_message_t> get_diagnostic_message(const std::string& message_name) const;
-               DiagnosticRequest* get_request_from_diagnostic_message(const std::string& message_name) const;
 /*
                /// TODO: implement this function as method into can_bus class
                /// @brief Pre initialize actions made before CAN bus initialization
index 61775b8..f503e0a 100644 (file)
@@ -65,14 +65,14 @@ active_diagnostic_request_t::active_diagnostic_request_t()
          socket_{}
 {}
 
-active_diagnostic_request_t::active_diagnostic_request_t(const std::string& bus, DiagnosticRequest* request,
+active_diagnostic_request_t::active_diagnostic_request_t(const std::string& bus, uint32_t id,
                const std::string& name,
                bool wait_for_multiple_responses,
                const DiagnosticResponseDecoder decoder,
                const DiagnosticResponseCallback callback,
                float frequencyHz)
        : bus_{bus},
-         id_{request->arbitration_id},
+         id_{id},
          handle_{nullptr},
          name_{name},
          decoder_{decoder},
index a1b8ab5..d263a2d 100644 (file)
@@ -91,7 +91,7 @@ public:
 
        active_diagnostic_request_t();
        active_diagnostic_request_t(active_diagnostic_request_t&&) = default;
-       active_diagnostic_request_t(const std::string& bus, DiagnosticRequest* request,
+       active_diagnostic_request_t(const std::string& bus, uint32_t id,
                const std::string& name, bool wait_for_multiple_responses,
                const DiagnosticResponseDecoder decoder,
                const DiagnosticResponseCallback callback, float frequencyHz);
index fd4fbd2..ac91ae5 100644 (file)
@@ -246,13 +246,13 @@ void diagnostic_manager_t::cleanup_active_requests(bool force)
 ///
 /// @param[in] request - Search key, method will go through recurring list to see if it find that request
 ///  holded by the DiagnosticHandle member.
-active_diagnostic_request_t* diagnostic_manager_t::find_recurring_request(const DiagnosticRequest* request)
+active_diagnostic_request_t* diagnostic_manager_t::find_recurring_request(DiagnosticRequest& request)
 {
        for (auto& entry : recurring_requests_)
        {
                if(entry != nullptr)
                {
-                       if(diagnostic_request_equals(&entry->get_handle()->request, request))
+                       if(diagnostic_request_equals(&entry->get_handle()->request, &request))
                                {return entry;}
                }
        }
@@ -297,7 +297,7 @@ active_diagnostic_request_t* diagnostic_manager_t::add_request(DiagnosticRequest
        {
                // TODO: implement Acceptance Filter
                //      if(updateRequiredAcceptanceFilters(bus, request)) {
-                       active_diagnostic_request_t* entry = new active_diagnostic_request_t(bus_, request, name,
+                       active_diagnostic_request_t* entry = new active_diagnostic_request_t(bus_, request->arbitration_id, name,
                                        wait_for_multiple_responses, decoder, callback, 0);
                        entry->set_handle(shims_, request);
 
@@ -393,11 +393,11 @@ active_diagnostic_request_t* diagnostic_manager_t::add_recurring_request(Diagnos
 
        cleanup_active_requests(false);
 
-       if(find_recurring_request(request) == nullptr)
+       if(find_recurring_request(*request) == nullptr)
        {
                if(recurring_requests_.size() <= MAX_SIMULTANEOUS_DIAG_REQUESTS)
                {
-                       entry = new active_diagnostic_request_t(bus_, request, name,
+                       entry = new active_diagnostic_request_t(bus_, request->arbitration_id, name,
                                        wait_for_multiple_responses, decoder, callback, frequencyHz);
                        recurring_requests_.push_back(entry);
 
index d52ffe9..4c023c6 100644 (file)
@@ -67,12 +67,13 @@ public:
        const std::string get_bus_device_name() const;
        active_diagnostic_request_t* get_last_recurring_requests() const;
        DiagnosticShims& get_shims();
+       bool is_active_requests_running();
 
        void find_and_erase(active_diagnostic_request_t* entry, std::vector<active_diagnostic_request_t*>& requests_list);
        void cancel_request(active_diagnostic_request_t* entry);
        void cleanup_request(active_diagnostic_request_t* entry, bool force);
        void cleanup_active_requests(bool force);
-       active_diagnostic_request_t* find_recurring_request(const DiagnosticRequest* request);
+       active_diagnostic_request_t* find_recurring_request(DiagnosticRequest& request);
 
        // Subscription parts
        active_diagnostic_request_t* add_request(DiagnosticRequest* request, const std::string& name,