== DETAILS If a call to HIDRead() ends up blocking indefinitely, it will cause the shutdown process to wait forever. To avoid a deadlock, I've put in a retry counter so that it will give up after 5s and print a warning to the log.