]> rtime.felk.cvut.cz Git - can-benchmark.git/blobdiff - latester/latester.c
latester: Do not fail on a single lost message in "oneatatime" mode
[can-benchmark.git] / latester / latester.c
index a6873b938b50ffccdb64fceffb882c10db423f12..bdd539c2ebebdafaf4609a5ded90607998e8d1ef 100644 (file)
@@ -82,6 +82,7 @@ struct {
        unsigned overrun;
        unsigned lost;
        struct timespec tic, tac;
        unsigned overrun;
        unsigned lost;
        struct timespec tic, tac;
+       unsigned timeouts;
 } stats;
 
 int num_interfaces = 0;
 } stats;
 
 int num_interfaces = 0;
@@ -510,6 +511,7 @@ void *measure_thread(void *arg)
        struct timespec timeout;
        struct sockaddr_can addr;
        sigset_t set;
        struct timespec timeout;
        struct sockaddr_can addr;
        sigset_t set;
+       int consecutive_timeouts = 0;
 
        MEMSET_ZERO(pfd);
 
 
        MEMSET_ZERO(pfd);
 
@@ -576,7 +578,13 @@ void *measure_thread(void *arg)
                                        SEND();
                                }
                        } else {
                                        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
                        }
                        break;
                default: // Event
@@ -596,6 +604,7 @@ void *measure_thread(void *arg)
 
                        i = (num_interfaces == 2) ? 1 : 2;
                        if (pfd[i].revents != 0) {
 
                        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;
                                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, "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);
 
 
        fclose(opt.f_stat);