/// @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
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;
}
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;
}
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;
adr->set_in_flight(true);
}
- if(adr->get_recurring())
+ if(adr != nullptr && adr->get_recurring())
{
return dm.reschedule_request(s, usec, adr);
}