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) { if (ioctl (priv->fd, TIOCGSERIAL, &sinfo) == 0) {
sinfo.closing_wait = ASYNC_CLOSING_WAIT_NONE; 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); g_get_current_time (&tv_end);
@@ -1027,7 +1029,9 @@ mm_serial_port_close (MMSerialPort *self)
if (sinfo.closing_wait != ASYNC_CLOSING_WAIT_NONE) { if (sinfo.closing_wait != ASYNC_CLOSING_WAIT_NONE) {
mm_warn ("(%s): serial port closing_wait was reset!", device); mm_warn ("(%s): serial port closing_wait was reset!", device);
sinfo.closing_wait = ASYNC_CLOSING_WAIT_NONE; 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));
} }
} }