From b31cbe945338d80ffceb40694fc51d88b01ebeea Mon Sep 17 00:00:00 2001 From: Badhri Jagan Sridharan Date: Fri, 24 Feb 2017 05:49:29 -0800 Subject: [PATCH] USB HAL: Fix infinite loop. Bug: 35726475 Test: usb-service no longer consumes 100% CPU Change-Id: I274caec45e7527cbacf57f9a735d711dcb481bfd --- usb/1.0/default/Usb.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/usb/1.0/default/Usb.cpp b/usb/1.0/default/Usb.cpp index f46ff66534..174e3c5357 100644 --- a/usb/1.0/default/Usb.cpp +++ b/usb/1.0/default/Usb.cpp @@ -172,17 +172,22 @@ rescan: ports++; } } + + if (ports == 0) { + closedir(dp); + return Status::SUCCESS; + } + names.resize(ports); rewinddir(dp); while ((ep = readdir (dp))) { - /* Check to see if new ports were added since the first pass. */ - if (current >= ports) { - rewinddir(dp); - goto rescan; - } - if (ep->d_type == DT_LNK) { + /* Check to see if new ports were added since the first pass. */ + if (current >= ports) { + rewinddir(dp); + goto rescan; + } names[current++] = ep->d_name; } } @@ -234,7 +239,7 @@ Status getPortStatusHelper (hidl_vec& currentPortStatus) { if (result == Status::SUCCESS) { currentPortStatus.resize(names.size()); - for(std::vector::size_type i = 0; i != names.size(); i++) { + for(std::vector::size_type i = 0; i < names.size(); i++) { ALOGI("%s", names[i].c_str()); currentPortStatus[i].portName = names[i];