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

Ben Chan benchan at chromium.org
Fri Jul 5 00:51:16 PDT 2013


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.
---
 src/mm-serial-port.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/mm-serial-port.c b/src/mm-serial-port.c
index 6482835..23a9815 100644
--- a/src/mm-serial-port.c
+++ b/src/mm-serial-port.c
@@ -940,7 +940,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; errno %d",
+                     device, errno);
     }
 
     g_get_current_time (&tv_end);
@@ -1030,7 +1032,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; errno %d",
+                             device, errno);
             }
         }
 
-- 
1.8.3



More information about the ModemManager-devel mailing list