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 <lockwood@android.com>
This commit is contained in:
parent
f91c96895d
commit
fe582b5d32
2 changed files with 10 additions and 3 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <dirent.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue