Add wall clock timeout warning to mpsse_flush()
[fw/openocd] / src / jtag / drivers / mpsse.c
index a881803adfc10a0dc80f5a02008d503cf63cfd1f..7488d9dd877c65a97a8b88057a3299d25001e3de 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "mpsse.h"
 #include "helper/log.h"
+#include "helper/time_support.h"
 #include <libusb.h>
 
 /* Compatibility define for older libusb-1.0 */
@@ -888,6 +889,8 @@ int mpsse_flush(struct mpsse_ctx *ctx)
        }
 
        /* Polling loop, more or less taken from libftdi */
+       int64_t start = timeval_ms();
+       int64_t warn_after = 2000;
        while (!write_result.done || !read_result.done) {
                struct timeval timeout_usb;
 
@@ -910,6 +913,13 @@ int mpsse_flush(struct mpsse_ctx *ctx)
                                        break;
                        }
                }
+
+               int64_t now = timeval_ms();
+               if (now - start > warn_after) {
+                       LOG_WARNING("Haven't made progress in mpsse_flush() for %" PRId64
+                                       "ms.", now - start);
+                       warn_after *= 2;
+               }
        }
 
 error_check: