diff --git a/Documentation/README.html b/Documentation/README.html
index 02a3042b484..fe4dced9adb 100644
--- a/Documentation/README.html
+++ b/Documentation/README.html
@@ -8,7 +8,7 @@
NuttX README Files
- Last Updated: April 18, 2017
+ Last Updated: May 9, 2017
|
diff --git a/drivers/serial/serial.c b/drivers/serial/serial.c
index 85fded4e470..775fa3a97a7 100644
--- a/drivers/serial/serial.c
+++ b/drivers/serial/serial.c
@@ -1,7 +1,7 @@
/************************************************************************************
* drivers/serial/serial.c
*
- * Copyright (C) 2007-2009, 2011-2013, 2016 Gregory Nutt. All rights reserved.
+ * Copyright (C) 2007-2009, 2011-2013, 2016-2017 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt
*
* Redistribution and use in source and binary forms, with or without
@@ -1207,26 +1207,31 @@ static int uart_close(FAR struct file *filep)
uart_disablerxint(dev);
- /* Now we wait for the transmit buffer to clear */
+ /* Prevent blocking if the device is opened with O_NONBLOCK */
- while (dev->xmit.head != dev->xmit.tail)
+ if ((filep->f_oflags & O_NONBLOCK) == 0)
{
-#ifndef CONFIG_DISABLE_SIGNALS
- usleep(HALF_SECOND_USEC);
-#else
- up_mdelay(HALF_SECOND_MSEC);
-#endif
- }
+ /* Now we wait for the transmit buffer to clear */
- /* And wait for the TX fifo to drain */
-
- while (!uart_txempty(dev))
- {
+ while (dev->xmit.head != dev->xmit.tail)
+ {
#ifndef CONFIG_DISABLE_SIGNALS
- usleep(HALF_SECOND_USEC);
+ usleep(HALF_SECOND_USEC);
#else
- up_mdelay(HALF_SECOND_MSEC);
+ up_mdelay(HALF_SECOND_MSEC);
#endif
+ }
+
+ /* And wait for the TX fifo to drain */
+
+ while (!uart_txempty(dev))
+ {
+#ifndef CONFIG_DISABLE_SIGNALS
+ usleep(HALF_SECOND_USEC);
+#else
+ up_mdelay(HALF_SECOND_MSEC);
+#endif
+ }
}
/* Free the IRQ and disable the UART */