diff --git a/services/usb/java/com/android/server/usb/UsbHostManager.java b/services/usb/java/com/android/server/usb/UsbHostManager.java index b1c85fe043ecd..f3892768921ce 100644 --- a/services/usb/java/com/android/server/usb/UsbHostManager.java +++ b/services/usb/java/com/android/server/usb/UsbHostManager.java @@ -102,6 +102,7 @@ public class UsbHostManager { private final HashMap> mMidiDevices = new HashMap>(); private final HashSet mMidiUniqueCodes = new HashSet(); + private static final int MAX_UNIQUE_CODE_GENERATION_ATTEMPTS = 10; private final Random mRandom = new Random(); private final boolean mHasMidiFeature; @@ -645,11 +646,18 @@ public class UsbHostManager { // Generate a 3 digit code. private String generateNewUsbDeviceIdentifier() { String code; + int numberOfAttempts = 0; do { + if (numberOfAttempts > MAX_UNIQUE_CODE_GENERATION_ATTEMPTS) { + Slog.w(TAG, "MIDI unique code array resetting"); + mMidiUniqueCodes.clear(); + numberOfAttempts = 0; + } code = ""; for (int i = 0; i < 3; i++) { code += mRandom.nextInt(10); } + numberOfAttempts++; } while (mMidiUniqueCodes.contains(code)); mMidiUniqueCodes.add(code); return code;