serial-port: warn if ioctl(TIOCSSERIAL) fails to set closing_wait

Prints out a warning if ioctl(TIOCSSERIAL) fails to set closing_wait to
none. This helps debug issues when a serial driver does not support or
properly handle closing_wait, which may cause closing of the serial port
to block.
This commit is contained in:
Ben Chan
2013-07-05 11:09:54 -07:00
committed by Aleksander Morgado
parent f0490b4fff
commit dd2b467262

View File

@@ -937,7 +937,9 @@ mm_serial_port_open (MMSerialPort *self, GError **error)
*/
if (ioctl (priv->fd, TIOCGSERIAL, &sinfo) == 0) {
sinfo.closing_wait = ASYNC_CLOSING_WAIT_NONE;
ioctl (priv->fd, TIOCSSERIAL, &sinfo);
if (ioctl (priv->fd, TIOCSSERIAL, &sinfo) < 0)
mm_warn ("(%s): couldn't set serial port closing_wait to none: %s",
device, g_strerror (errno));
}
g_get_current_time (&tv_end);
@@ -1027,7 +1029,9 @@ mm_serial_port_close (MMSerialPort *self)
if (sinfo.closing_wait != ASYNC_CLOSING_WAIT_NONE) {
mm_warn ("(%s): serial port closing_wait was reset!", device);
sinfo.closing_wait = ASYNC_CLOSING_WAIT_NONE;
(void) ioctl (priv->fd, TIOCSSERIAL, &sinfo);
if (ioctl (priv->fd, TIOCSSERIAL, &sinfo) < 0)
mm_warn ("(%s): couldn't set serial port closing_wait to none: %s",
device, g_strerror (errno));
}
}