Index: build/android/buildbot/bb_device_status_check.py |
diff --git a/build/android/buildbot/bb_device_status_check.py b/build/android/buildbot/bb_device_status_check.py |
index cba8132003959872a82ad8c425fa6522bd1c8320..7b656013f2870d605288d00e10074a2c50b7687e 100755 |
--- a/build/android/buildbot/bb_device_status_check.py |
+++ b/build/android/buildbot/bb_device_status_check.py |
@@ -225,7 +225,7 @@ def RestartUsb(): |
if not os.path.isfile('/usr/bin/restart_usb'): |
print ('ERROR: Could not restart usb. /usr/bin/restart_usb not installed ' |
'on host (see BUG=305769).') |
- return 1 |
+ return False |
lsusb_proc = bb_utils.SpawnCmd(['lsusb'], stdout=subprocess.PIPE) |
lsusb_output, _ = lsusb_proc.communicate() |
@@ -236,7 +236,7 @@ def RestartUsb(): |
usb_devices = [re.findall('Bus (\d\d\d) Device (\d\d\d)', lsusb_line)[0] |
for lsusb_line in lsusb_output.strip().split('\n')] |
- failed_restart = False |
+ all_restarted = True |
# Walk USB devices from leaves up (i.e reverse sorted) restarting the |
# connection. If a parent node (e.g. usb hub) is restarted before the |
# devices connected to it, the (bus, dev) for the hub can change, making the |
@@ -247,14 +247,11 @@ def RestartUsb(): |
return_code = bb_utils.RunCmd(['/usr/bin/restart_usb', bus, dev]) |
if return_code: |
print 'Error restarting USB device /dev/bus/usb/%s/%s' % (bus, dev) |
- failed_restart = True |
+ all_restarted = False |
else: |
print 'Restarted USB device /dev/bus/usb/%s/%s' % (bus, dev) |
- if failed_restart: |
- return 1 |
- |
- return 0 |
+ return all_restarted |
def KillAllAdb(): |
@@ -299,18 +296,24 @@ def main(): |
if options.restart_usb: |
expected_devices = GetLastDevices(os.path.abspath(options.out_dir)) |
devices = android_commands.GetAttachedDevices() |
- # Only restart usb if devices are missing |
+ # Only restart usb if devices are missing. |
if set(expected_devices) != set(devices): |
KillAllAdb() |
retries = 5 |
- if RestartUsb(): |
+ usb_restarted = True |
+ if not RestartUsb(): |
+ usb_restarted = False |
bb_annotations.PrintWarning() |
- print "USB reset stage failed, continuing anyway." |
- retries = 0 |
+ print 'USB reset stage failed, wait for any device to come back.' |
while retries: |
time.sleep(1) |
devices = android_commands.GetAttachedDevices() |
if set(expected_devices) == set(devices): |
+ # All devices are online, keep going. |
+ break |
+ if not usb_restarted and devices: |
+ # The USB wasn't restarted, but there's at least one device online. |
+ # No point in trying to wait for all devices. |
break |
retries -= 1 |