Delay new recurring requests if there are already existing in flight and
cleanup active request to correctly set in_flight_ flag to false else new
request can't be launched as there is always an old one considered running...
Modify a little bit DEBUG message and cleanup useless code.
Change-Id: I39f865bbc6d00188d3cddd1d81437b9e3ca51269
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
/// @brief Check is the request should be sent or not
///
/// @return true if the request is not running or recurring nor completed,
/// @brief Check is the request should be sent or not
///
/// @return true if the request is not running or recurring nor completed,
-/// or it's recurring, its clock elapsed, request was successful
+/// or it's recurring, its clock elapsed
/// so it's time to send another one.
bool active_diagnostic_request_t::should_send()
{
/// so it's time to send another one.
bool active_diagnostic_request_t::should_send()
{
- return !in_flight_ || (!recurring_ && !request_completed()) ||
- (recurring_ && frequency_clock_.elapsed(true) && request_completed() && handle_->success);
+ return !in_flight_ && ( (!recurring_ && !request_completed()) ||
+ (recurring_ && frequency_clock_.elapsed(true)) );
}
/// @brief check if the timeout clock has elapsed
}
/// @brief check if the timeout clock has elapsed
wait_for_multiple_responses, decoder, callback, frequencyHz);
entry->set_handle(shims_, request);
wait_for_multiple_responses, decoder, callback, frequencyHz);
entry->set_handle(shims_, request);
- char request_string[128] = {0};
- diagnostic_request_to_string(&entry->get_handle()->request, request_string,
- sizeof(request_string));
+ //start_diagnostic_request(&shims_, entry->get_handle());
+ //char request_string[128] = {0};
+ //diagnostic_request_to_string(&entry->get_handle()->request, request_string,
+ // sizeof(request_string));
uint64_t usec;
sd_event_now(afb_daemon_get_event_loop(binder_interface->daemon), CLOCK_BOOTTIME, &usec);
uint64_t usec;
sd_event_now(afb_daemon_get_event_loop(binder_interface->daemon), CLOCK_BOOTTIME, &usec);
+ if(recurring_requests_.size() > 0)
+ {
+ DEBUG(binder_interface, "add_recurring_request: Added 100ms to usec to stagger sending requests");
+ usec += 100000;
+ }
- DEBUG(binder_interface, "add_recurring_request: Added recurring diagnostic request (freq: %f) on bus %s: (%s) at %ld",
+ DEBUG(binder_interface, "add_recurring_request: Added recurring diagnostic request (freq: %f) on bus %s at %ld. Event loop state: %d",
frequencyHz,
bus_.c_str(),
frequencyHz,
bus_.c_str(),
- request_string,
- usec);
+ usec,
+ sd_event_get_state(afb_daemon_get_event_loop(binder_interface->daemon)));
if(sd_event_add_time(afb_daemon_get_event_loop(binder_interface->daemon), &source,
CLOCK_BOOTTIME, usec, TIMERFD_ACCURACY, send_request, request) < 0)
if(sd_event_add_time(afb_daemon_get_event_loop(binder_interface->daemon), &source,
CLOCK_BOOTTIME, usec, TIMERFD_ACCURACY, send_request, request) < 0)
DiagnosticRequest* request = (DiagnosticRequest*)userdata;
active_diagnostic_request_t* adr = dm.find_recurring_request(request);
DiagnosticRequest* request = (DiagnosticRequest*)userdata;
active_diagnostic_request_t* adr = dm.find_recurring_request(request);
+ dm.cleanup_active_requests(false);
if(adr != nullptr && adr->get_can_bus_dev() == dm.get_can_bus_dev() && adr->should_send() &&
dm.clear_to_send(adr))
{
if(adr != nullptr && adr->get_can_bus_dev() == dm.get_can_bus_dev() && adr->should_send() &&
dm.clear_to_send(adr))
{