]> rtime.felk.cvut.cz Git - can-benchmark.git/blobdiff - latester/latester.c
Do not call poll with negative timeout
[can-benchmark.git] / latester / latester.c
index c728f5804a5c1fc51a58d8214d02e52119a8196e..c980f247ac9841b3aa4755aa3966880c2550865e 100644 (file)
@@ -72,6 +72,11 @@ struct options opt = {
        .length = 2,
 };
 
+struct {
+       unsigned enobufs;
+       unsigned overrun;
+} stats;
+
 int num_interfaces = 0;
 int count = 0;                 /* Number of sent messages */
 int completion_pipe[2];
@@ -397,7 +402,10 @@ static inline void get_next_timeout(struct timespec *timeout)
                        last.tv_nsec -= 1000000000;
                        last.tv_sec++;
                }
-               timespec_subtract(timeout, &last, &now);
+               if (timespec_subtract(timeout, &last, &now) /* is negative */) {
+                       stats.overrun++;
+                       memset(timeout, 0, sizeof(*timeout));
+               }
        } else if (opt.timeout_ms != 0) {
                timeout->tv_sec = opt.timeout_ms/1000;
                timeout->tv_nsec = (opt.timeout_ms%1000)*1000000;
@@ -532,13 +540,14 @@ void *measure_thread(void *arg)
                        pfd[i].events = POLLIN;
        }
 
-       set_sched_policy_and_prio(SCHED_FIFO, 99);
+       set_sched_policy_and_prio(SCHED_FIFO, 40);
 
 #define SEND()                                                         \
        do {                                                            \
                ret = send_frame(pfd[0].fd);                            \
                if (ret != sizeof(struct can_frame)) {                  \
                        if (ret == -1 && errno == ENOBUFS && opt.period_us == 0 && !opt.oneattime) { \
+                               stats.enobufs++;                        \
                                /* Ignore this error - pfifo_fast qeuue is full */ \
                        } else                                          \
                                error(1, errno, "send_frame (line %d)", __LINE__); \
@@ -746,5 +755,10 @@ int main(int argc, const char *argv[])
        if (opt.file)
                fclose(opt.file);
 
+       if (stats.overrun)
+               printf("overrun=%d\n", stats.overrun);
+       if (stats.enobufs)
+               printf("enobufs=%d\n", stats.enobufs);
+
        return 0;
 }