Print all times (do not miss the last one)
authorMichal Sojka <sojkam1@fel.cvut.cz>
Tue, 30 Nov 2010 09:47:15 +0000 (10:47 +0100)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Tue, 30 Nov 2010 09:47:15 +0000 (10:47 +0100)
Also temporarily print the whole msg_info (for debugging)

latester/latester.c

index 63d96e5..3df0a6c 100644 (file)
@@ -103,7 +103,7 @@ static inline char *tstamp_str(const void *ctx, struct timespec *tstamp)
                               tstamp->tv_sec, tstamp->tv_nsec/1000);
 }
 
-void print_msg_info(struct msg_info *mi)
+void msg_info_print(FILE *f, struct msg_info *mi)
 {
        struct timespec diff;
        void *local = talloc_new (NULL);
@@ -112,12 +112,12 @@ void print_msg_info(struct msg_info *mi)
 #define DIFF(a, b) (timespec_subtract(&diff, &b, &a), S(diff))
 
        if (num_interfaces == 2)
-               printf("%s -> %s (%s) = %s (%s)\n",
+               fprintf(f, "%s -> %s (%s) = %s (%s)\n",
                       S(mi->ts_sent), S(mi->ts_rx_final_kern), S(mi->ts_rx_final),
                       DIFF(mi->ts_sent, mi->ts_rx_final_kern),
                       DIFF(mi->ts_sent, mi->ts_rx_final));
        else
-               printf("%s -> %s (%s) -> %s (%s) = %s (%s), %s (%s)\n",
+               fprintf(f, "%s -> %s (%s) -> %s (%s) = %s (%s), %s (%s)\n",
                       S(mi->ts_sent),
                       S(mi->ts_rx_onwire_kern), S(mi->ts_rx_onwire),
                       S(mi->ts_rx_final_kern), S(mi->ts_rx_final),
@@ -576,7 +576,8 @@ int main(int argc, const char *argv[])
 
        struct timespec next, now, diff;
        clock_gettime(CLOCK_MONOTONIC, &next);
-       while (!finish_flag && (opt.count == 0 || count < opt.count)) {
+       int completed = 0;
+       while (!finish_flag && (opt.count == 0 || completed < opt.count)) {
                struct pollfd pfd[1];
                pfd[0].fd = completion_pipe[0];
                pfd[0].events = POLLIN;
@@ -585,10 +586,14 @@ int main(int argc, const char *argv[])
                        error(1, errno, "poll main");
                if (ret > 0 && (pfd[0].revents & POLLIN)) {
                        struct msg_info *mi;
-                       read(completion_pipe[0], &mi, sizeof(mi));
+                       int ret;
+                       ret = read(completion_pipe[0], &mi, sizeof(mi));
+                       if (ret < sizeof(mi))
+                               error(1, errno, "read completion returned %d", ret);
                        if (opt.file)
-                               msg_info_store(opt.file, mi);
+                               msg_info_print(opt.file, mi);
                        msg_info_free(mi);
+                       completed++;
                }
 
                clock_gettime(CLOCK_MONOTONIC, &now);