From 1aad8b6ec9f0ec822080ef70c23cd494dacdeb2d Mon Sep 17 00:00:00 2001 From: Jacob Dahl <37091262+dakejahl@users.noreply.github.com> Date: Thu, 11 Sep 2025 12:32:34 -0800 Subject: [PATCH] serial: nuttx: revert tcdrain back to fsync (#25538) * serial: nuttx: revert tcdrain back to fsync * serial: do not print error on EAGAIN --------- Co-authored-by: Alexander Lerach --- platforms/nuttx/src/px4/common/SerialImpl.cpp | 7 +++++-- platforms/posix/src/px4/common/SerialImpl.cpp | 8 +++++--- platforms/qurt/src/px4/SerialImpl.cpp | 5 +++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/platforms/nuttx/src/px4/common/SerialImpl.cpp b/platforms/nuttx/src/px4/common/SerialImpl.cpp index cd9caa4982..f3a9f2389b 100644 --- a/platforms/nuttx/src/px4/common/SerialImpl.cpp +++ b/platforms/nuttx/src/px4/common/SerialImpl.cpp @@ -355,12 +355,15 @@ ssize_t SerialImpl::write(const void *buffer, size_t buffer_size) } int written = ::write(_serial_fd, buffer, buffer_size); - tcdrain(_serial_fd); // Wait until all output is transmitted if (written < 0) { - PX4_ERR("%s write error %d", _port, written); + if (errno != EAGAIN) { + PX4_ERR("%s write error %d", _port, written); + } } + ::fsync(_serial_fd); + return written; } diff --git a/platforms/posix/src/px4/common/SerialImpl.cpp b/platforms/posix/src/px4/common/SerialImpl.cpp index 6d9b64a828..9ad8d62567 100644 --- a/platforms/posix/src/px4/common/SerialImpl.cpp +++ b/platforms/posix/src/px4/common/SerialImpl.cpp @@ -337,13 +337,15 @@ ssize_t SerialImpl::write(const void *buffer, size_t buffer_size) } int written = ::write(_serial_fd, buffer, buffer_size); - ::fsync(_serial_fd); if (written < 0) { - PX4_ERR("%s write error %d", _port, written); - + if (errno != EAGAIN) { + PX4_ERR("%s write error %d", _port, written); + } } + ::fsync(_serial_fd); + return written; } diff --git a/platforms/qurt/src/px4/SerialImpl.cpp b/platforms/qurt/src/px4/SerialImpl.cpp index e176f528c9..c2c88e43b9 100644 --- a/platforms/qurt/src/px4/SerialImpl.cpp +++ b/platforms/qurt/src/px4/SerialImpl.cpp @@ -268,8 +268,9 @@ ssize_t SerialImpl::write(const void *buffer, size_t buffer_size) int ret_write = qurt_uart_write(_serial_fd, (const char *) buffer, buffer_size); if (ret_write < 0) { - PX4_ERR("%s write error %d", _port, ret_write); - + if (errno != EAGAIN) { + PX4_ERR("%s write error %d", _port, ret_write); + } } return ret_write;