This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit b990b25b8ecd2e73548ae54742637c451f2f0589
Author: YAMAMOTO Takashi <yamam...@midokura.com>
AuthorDate: Wed Nov 13 18:33:58 2024 +0900

    Reapply "SYSLOG_DEFAULT: wrap up_putc/up_nputs calls with critical section"
    
    This reverts commit 35240d77faa0b5e00d0bb3e9024ac2dde7c8362a.
---
 drivers/serial/serial.c         |  4 ++++
 drivers/syslog/syslog_channel.c | 23 +++++++++++++----------
 2 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/drivers/serial/serial.c b/drivers/serial/serial.c
index 6915e8d1f3..d475f44d12 100644
--- a/drivers/serial/serial.c
+++ b/drivers/serial/serial.c
@@ -268,6 +268,10 @@ static int uart_putxmitchar(FAR uart_dev_t *dev, int ch, 
bool oktoblock)
         {
           /* The following steps must be atomic with respect to serial
            * interrupt handling.
+           *
+           * This critical section is also used for the serialization
+           * with the up_putc-based syslog channels.
+           * See https://github.com/apache/nuttx/issues/14662
            */
 
           flags = enter_critical_section();
diff --git a/drivers/syslog/syslog_channel.c b/drivers/syslog/syslog_channel.c
index a7893359d7..8038271d59 100644
--- a/drivers/syslog/syslog_channel.c
+++ b/drivers/syslog/syslog_channel.c
@@ -33,7 +33,6 @@
 
 #include <nuttx/syslog/syslog.h>
 #include <nuttx/compiler.h>
-#include <nuttx/mutex.h>
 
 #ifdef CONFIG_RAMLOG_SYSLOG
 #  include <nuttx/syslog/ramlog.h>
@@ -72,10 +71,6 @@ static ssize_t syslog_default_write(FAR syslog_channel_t 
*channel,
  * Private Data
  ****************************************************************************/
 
-#if defined(CONFIG_SYSLOG_DEFAULT) && defined(CONFIG_ARCH_LOWPUTC)
-static mutex_t g_lowputs_lock = NXMUTEX_INITIALIZER;
-#endif
-
 #ifdef CONFIG_RAMLOG_SYSLOG
 static const struct syslog_channel_ops_s g_ramlog_channel_ops =
 {
@@ -234,11 +229,17 @@ g_syslog_channel[CONFIG_SYSLOG_MAX_CHANNELS] =
 #ifdef CONFIG_SYSLOG_DEFAULT
 static int syslog_default_putc(FAR syslog_channel_t *channel, int ch)
 {
-  UNUSED(channel);
-
 #  ifdef CONFIG_ARCH_LOWPUTC
+  /* See https://github.com/apache/nuttx/issues/14662
+   * about what this critical section is for.
+   */
+
+  irqstate_t flags = enter_critical_section();
   up_putc(ch);
+  leave_critical_section(flags);
 #  endif
+
+  UNUSED(channel);
   return ch;
 }
 
@@ -246,11 +247,13 @@ static ssize_t syslog_default_write(FAR syslog_channel_t 
*channel,
                                     FAR const char *buffer, size_t buflen)
 {
 #  ifdef CONFIG_ARCH_LOWPUTC
-  nxmutex_lock(&g_lowputs_lock);
+  /* See https://github.com/apache/nuttx/issues/14662
+   * about what this critical section is for.
+   */
 
+  irqstate_t flags = enter_critical_section();
   up_nputs(buffer, buflen);
-
-  nxmutex_unlock(&g_lowputs_lock);
+  leave_critical_section(flags);
 #  endif
 
   UNUSED(channel);

Reply via email to