Add wall clock timeout warning to mpsse_flush()
I think that libusb_handle_events_timeout_completed is supposed to make progress or time out, but sometimes we hit a case where it makes no progress, and mpsse_flush() loops forever. This wall clock timeout notifies the user that this is going on. When I wrote this code, this bug would reproduce every hour or two, but right now it's not happening for me. Change-Id: I7eb66f43462298e263a48048aa0c8769095661eb Signed-off-by: Tim Newsome <tim@sifive.com> Reviewed-on: http://openocd.zylin.com/4767 Tested-by: jenkins Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
This commit is contained in:
parent
0a13ca1a8a
commit
d214cadfef
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue