From 851ed48e4a16e8f10571e730456e43e710b69b1f Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Fri, 10 Dec 2010 17:55:54 +0100 Subject: [PATCH] latester: Do not fail on a single lost message in "oneatatime" mode Also exit after 10 consecutive lost messages (i.e. after 10 seconds by default) --- latester/latester.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/latester/latester.c b/latester/latester.c index a6873b9..bdd539c 100644 --- a/latester/latester.c +++ b/latester/latester.c @@ -82,6 +82,7 @@ struct { unsigned overrun; unsigned lost; struct timespec tic, tac; + unsigned timeouts; } stats; int num_interfaces = 0; @@ -510,6 +511,7 @@ void *measure_thread(void *arg) struct timespec timeout; struct sockaddr_can addr; sigset_t set; + int consecutive_timeouts = 0; MEMSET_ZERO(pfd); @@ -576,7 +578,13 @@ void *measure_thread(void *arg) SEND(); } } else { - error(1, 0, "poll timeout"); + /* Lost message - send a new one */ + stats.timeouts++; + consecutive_timeouts++; + if (consecutive_timeouts < 10) + SEND(); + else /* Something is really broken */ + finish_flag = 1; } break; default: // Event @@ -596,6 +604,7 @@ void *measure_thread(void *arg) i = (num_interfaces == 2) ? 1 : 2; if (pfd[i].revents != 0) { + consecutive_timeouts = 0; process_final_rx(pfd[i].fd); msg_in_progress--; pfd[i].revents = 0; @@ -797,6 +806,9 @@ int main(int argc, const char *argv[]) fprintf(opt.f_stat, "lost=%d\n", stats.lost); if (stats.lost && !opt.quiet) printf("lost=%d\n", stats.lost); + fprintf(opt.f_stat, "timeouts=%d\n", stats.timeouts); + if (stats.timeouts && !opt.quiet) + printf("timeouts=%d\n", stats.timeouts); fclose(opt.f_stat); -- 2.39.2