Do not call poll with negative timeout
authorMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 3 Dec 2010 22:33:32 +0000 (23:33 +0100)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 3 Dec 2010 22:33:32 +0000 (23:33 +0100)
latester/latester.c

index d178e1e..c980f24 100644 (file)
@@ -74,6 +74,7 @@ struct options opt = {
 
 struct {
        unsigned enobufs;
+       unsigned overrun;
 } stats;
 
 int num_interfaces = 0;
@@ -401,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;
@@ -751,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;
 }