From 505bd6e5fcc576eb3bea87ac86db8aeed86d9a0d Mon Sep 17 00:00:00 2001 From: Mike Lockwood Date: Fri, 19 Feb 2010 17:45:57 -0500 Subject: adb: Add five second timeout for USB writes on Linux host. This helps us recover when things go wrong during automated testing. Change-Id: I006dbfaff7f70d51398ff12fbddcaee751453b78 Signed-off-by: Mike Lockwood --- adb/adb.h | 2 +- adb/usb_linux.c | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) (limited to 'adb') diff --git a/adb/adb.h b/adb/adb.h index a148019..aaf8a28 100644 --- a/adb/adb.h +++ b/adb/adb.h @@ -33,7 +33,7 @@ #define ADB_VERSION_MAJOR 1 // Used for help/version information #define ADB_VERSION_MINOR 0 // Used for help/version information -#define ADB_SERVER_VERSION 25 // Increment this when we want to force users to start a new adb server +#define ADB_SERVER_VERSION 26 // Increment this when we want to force users to start a new adb server typedef struct amessage amessage; typedef struct apacket apacket; diff --git a/adb/usb_linux.c b/adb/usb_linux.c index 66ee317..bb86813 100644 --- a/adb/usb_linux.c +++ b/adb/usb_linux.c @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -287,6 +288,8 @@ static int usb_bulk_write(usb_handle *h, const void *data, int len) { struct usbdevfs_urb *urb = &h->urb_out; int res; + struct timeval tv; + struct timespec ts; memset(urb, 0, sizeof(*urb)); urb->type = USBDEVFS_URB_TYPE_BULK; @@ -313,8 +316,12 @@ static int usb_bulk_write(usb_handle *h, const void *data, int len) res = -1; h->urb_out_busy = 1; for(;;) { - adb_cond_wait(&h->notify, &h->lock); - if(h->dead) { + /* time out after five seconds */ + gettimeofday(&tv, NULL); + ts.tv_sec = tv.tv_sec + 5; + ts.tv_nsec = tv.tv_usec * 1000L; + res = pthread_cond_timedwait(&h->notify, &h->lock, &ts); + if(res < 0 || h->dead) { break; } if(h->urb_out_busy == 0) { -- cgit v1.1