been doing some testing with @exotic spindle and he realized that the usb_uart component breaks under high load and/or when the main loop is blocked for any duration.
in particular, usb_host_client_handle_events is being called in the main loop, which means the callbacks get called in the main loop, and callback into the other components, and block. It also means we don’t read the data fast enough because if the loop is busy the events aren’t processed. It only works if the event loop is working perfectly and nothing is blocked. As soon as anything is busy its unstable.
based on Espressif's docs we believe the USB task(s) should have their own thread.