Get recurring requests suspend proof.
[apps/agl-service-can-low-level.git] / src / diagnostic / diagnostic-manager.cpp
index d236160..ee584bf 100644 (file)
@@ -166,18 +166,17 @@ void diagnostic_manager_t::cancel_request(active_diagnostic_request_t* entry)
 /// @param[in] force - Force the cleaning or not ?
 void diagnostic_manager_t::cleanup_request(active_diagnostic_request_t* entry, bool force)
 {
-       if((force || (entry->get_in_flight() && entry->request_completed())) && entry != nullptr)
+       if((force || (entry != nullptr && entry->get_in_flight() && entry->request_completed())))
        {
                entry->set_in_flight(false);
 
                char request_string[128] = {0};
                diagnostic_request_to_string(&entry->get_handle()->request,
                        request_string, sizeof(request_string));
-               if(entry->get_recurring())
+               if(force && entry->get_recurring())
                {
                        find_and_erase(entry, recurring_requests_);
-                       if(force)
-                               cancel_request(entry);
+                       cancel_request(entry);
                        DEBUG(binder_interface, "cleanup_request: Cancelling completed, recurring request: %s", request_string);
                }
                else
@@ -273,13 +272,13 @@ bool diagnostic_manager_t::add_request(DiagnosticRequest* request, const std::st
 
                        find_and_erase(entry, non_recurring_requests_);
                        DEBUG(binder_interface, "Added one-time diagnostic request on bus %s: %s",
-                                       bus_, request_string);
+                                       bus_.c_str(), request_string);
 
                        non_recurring_requests_.push_back(entry);
        }
        else
        {
-               WARNING(binder_interface, "There isn't enough request entry. Vector exhausted %d/%d", (int)non_recurring_requests_.size());
+               WARNING(binder_interface, "There isn't enough request entry. Vector exhausted %d/%d", (int)non_recurring_requests_.size(), MAX_SIMULTANEOUS_DIAG_REQUESTS);
                non_recurring_requests_.resize(MAX_SIMULTANEOUS_DIAG_REQUESTS);
                added = false;
        }
@@ -289,7 +288,7 @@ bool diagnostic_manager_t::add_request(DiagnosticRequest* request, const std::st
 bool diagnostic_manager_t::validate_optional_request_attributes(float frequencyHz)
 {
        if(frequencyHz > MAX_RECURRING_DIAGNOSTIC_FREQUENCY_HZ) {
-               DEBUG(binder_interface, "Requested recurring diagnostic frequency %d is higher than maximum of %d",
+               DEBUG(binder_interface, "Requested recurring diagnostic frequency %lf is higher than maximum of %d",
                        frequencyHz, MAX_RECURRING_DIAGNOSTIC_FREQUENCY_HZ);
                return false;
        }
@@ -374,13 +373,17 @@ bool diagnostic_manager_t::add_recurring_request(DiagnosticRequest* request, con
                        diagnostic_request_to_string(&entry->get_handle()->request, request_string,
                                        sizeof(request_string));
 
-                       DEBUG(binder_interface, "add_recurring_request: Added recurring diagnostic request (freq: %f) on bus %s: %s",
-                                       frequencyHz, bus_.c_str(), request_string);
-
                        uint64_t usec;
-                       sd_event_now(afb_daemon_get_event_loop(binder_interface->daemon), CLOCK_MONOTONIC, &usec);
+                       sd_event_now(afb_daemon_get_event_loop(binder_interface->daemon), CLOCK_BOOTTIME, &usec);
+
+                       DEBUG(binder_interface, "add_recurring_request: Added recurring diagnostic request (freq: %f) on bus %s: (%s) at %ld",
+                                       frequencyHz,
+                                       bus_.c_str(),
+                                       request_string,
+                                       usec);
+
                        if(sd_event_add_time(afb_daemon_get_event_loop(binder_interface->daemon), &source,
-                                       CLOCK_MONOTONIC, usec, TIMERFD_ACCURACY, send_request, request) < 0)
+                                       CLOCK_BOOTTIME, usec, TIMERFD_ACCURACY, send_request, request) < 0)
                        {
                                ERROR(binder_interface, "add_recurring_request: Request fails to be schedule through event loop");
                                added = false;
@@ -481,7 +484,7 @@ int diagnostic_manager_t::send_request(sd_event_source *s, uint64_t usec, void *
                adr->set_in_flight(true);
        }
 
-       if(adr->get_recurring())
+       if(adr != nullptr && adr->get_recurring())
        {
                return dm.reschedule_request(s, usec, adr);
        }