Do not wait indefinitely if some messages are lost
authorMichal Sojka <sojkam1@fel.cvut.cz>
Sat, 4 Dec 2010 11:38:42 +0000 (12:38 +0100)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Sat, 4 Dec 2010 11:38:42 +0000 (12:38 +0100)
latester/latester.c

index a72558a..f3ba4c6 100644 (file)
@@ -75,6 +75,7 @@ struct options opt = {
 struct {
        unsigned enobufs;
        unsigned overrun;
+       unsigned lost;
 } stats;
 
 int num_interfaces = 0;
@@ -713,7 +714,7 @@ int main(int argc, const char *argv[])
 
        pthread_create(&thread, 0, measure_thread, NULL);
 
-       struct timespec next, now, diff;
+       struct timespec next, now, diff, allsent = {0,0};
        clock_gettime(CLOCK_MONOTONIC, &next);
        int completed = 0;
        while (!finish_flag && (opt.count == 0 || completed < opt.count)) {
@@ -744,10 +745,18 @@ int main(int argc, const char *argv[])
                                next.tv_sec++;
                        }
                }
+               if (opt.count != 0 && count >= opt.count) {
+                       if (allsent.tv_sec == 0)
+                               allsent = now;
+                       if (now.tv_sec - allsent.tv_sec >= 2)
+                               finish_flag = 1;
+               }
        }
        print_progress();
        printf("\n");
 
+       stats.lost = msg_in_progress;
+
        pthread_join(thread, NULL);
 
        close(completion_pipe[0]);
@@ -764,6 +773,8 @@ int main(int argc, const char *argv[])
                printf("overrun=%d\n", stats.overrun);
        if (stats.enobufs)
                printf("enobufs=%d\n", stats.enobufs);
+       if (stats.lost)
+               printf("lost=%d\n", stats.enobufs);
 
        return 0;
 }