message: chore: Serial port should only try reading if bytes are available
  Otherwise it'll block the write thread during timeouts.
  Fixes
diff: @@ -6,15 +6,8 @@ use crate::{
  },
  device::{
  configuration_manager::{DeviceSpecifier, ProtocolDefinition, SerialSpecifier},
  - ButtplugDeviceEvent,
  - ButtplugDeviceImplCreator,
  - DeviceImpl,
  - DeviceImplInternal,
  - DeviceReadCmd,
  - DeviceSubscribeCmd,
  - DeviceUnsubscribeCmd,
  - DeviceWriteCmd,
  - Endpoint,
  + ButtplugDeviceEvent, ButtplugDeviceImplCreator, DeviceImpl, DeviceImplInternal, DeviceReadCmd,
  + DeviceSubscribeCmd, DeviceUnsubscribeCmd, DeviceWriteCmd, Endpoint,
  },
  server::comm_managers::ButtplugDeviceSpecificError,
  util::async_manager,
  @@ -100,6 +93,12 @@ fn serial_read_thread(
  while !token.is_cancelled() {
  // TODO This is probably too small
  let mut buf: [u8; 1024] = [0; 1024];
  + match port.bytes_to_read() {
  + Ok(read_len) => {
  + if read_len == 0 {
  + thread::sleep(Duration::from_millis(10));
  + continue;
  + }
  match port.read(&mut buf) {
  Ok(len) => {
  trace!("Got {} serial bytes", len);
  @@ -116,6 +115,14 @@ fn serial_read_thread(
  }
  }
  }
  + Err(e) => {
  + warn!("Error reading from serial port: {:?}", e);
  + if e.kind() == serialport::ErrorKind::NoDevice {
  + info!("Serial device gone, breaking out of read loop.");
  + }
  + }
  + }
  + }
  }
  pub struct SerialPortDeviceImpl {
  